使用 Ajax 发布数组但 PHP 获取字符串

Posted

技术标签:

【中文标题】使用 Ajax 发布数组但 PHP 获取字符串【英文标题】:Post array with Ajax but PHP gets string 【发布时间】:2020-12-21 00:01:38 【问题描述】:

我将几个变量从 Ajax 发布到 php,其中一个是数组。然而 PHP 看到的是字符串而不是数组。我不知道出了什么问题。

在 Firefox 开发控制台中看到的 Ajax 字符串:

表单数据:

id=106
category_name=windows
category_friendly_name=Windows+product
show_for_ids=4
show_for_ids=7
show_for_ids=10
show_for_ids=12
is_admin_only=0
action=edit

请求负载

id=106&category_name=windows&category_friendly_name=Windows+product&show_for_ids=4&show_for_ids=7&show_for_ids=10&show_for_ids=12&is_admin_only=0&action=edit

PHP:

var_dump($_POST['show_for_ids']);

输出:

string(2) "12"

使用Multi-select plugin for TableEdit 和Jquery-multi-select

我错过了什么?

【问题讨论】:

对于数组,您的数据必须是show_for_ids[]=4 show_for_ids[]=7 等。当前下一个值只是覆盖了上一个。可能你在name 属性中忘记了[] @charlietfl 标题是 AJAX 并且有一个 ajax 标签。 展示如何创建有效负载。如果使用 data 的对象,它应该被 jQuery 正确序列化,这样你就会收到一个数组 谢谢,我必须修改 jquery-tabledit 才能让它工作 【参考方案1】:

感谢@u_mulder 的评论,我通过修改Github 上为jquery-tabledit 第140 行提供的代码解决了这个问题。

我变了

input = '<select class="multiSelect tabledit-input ' + settings.inputClass + '" name="' + settings.columns.editable[i][1] + '" style="display: none; width:auto;" disabled multiple >';

进入

var input = '<select class="multiSelect tabledit-input ' + settings.inputClass + '" name="' + settings.columns.editable[i][1] + '[]" style="display: none; width:auto;" disabled multiple >';

【讨论】:

以上是关于使用 Ajax 发布数组但 PHP 获取字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中使用来自 AJAX 请求的 JSON 字符串 [关闭]

AJAX 成功调用仅从 JSON 字符串中获取一个值

将 jQuery 数组字符串转换为 PHP 数组

如何通过 AJAX 发送“&”(和号)字符?

jQuery 1.4.4+ AJAX 请求 - 发布空数组或对象变成字符串

如何在mysql php中保存json数组