【问题标题】:How to pass JS array via POST AJAX to PHP?如何通过 POST AJAX 将 JS 数组传递给 PHP?
【发布时间】:2012-03-08 08:40:00
【问题描述】:

这是我的代码:

var var_ids = new Array();
var i = 0;
jQuery("select").each(function() {
var_ids[i] = jQuery("option:selected",this).val();
i++;
}

var $data = {
action: "do_something",
var_ids: var_ids,
};
jQuery.post(doajax.ajaxurl, $data, function(response) {
    alert(response);

}); 

在我的 php 中:

$ids = mysql_real_escape_string(trim($_POST['var_ids']));
exit(print_r($ids));

它只是返回垃圾......所以我的问题是如何通过 AJAX 传递一个数组来发布 php?

谢谢。

【问题讨论】:

  • 定义garbage?如果你var_dump($_POST);怎么办?
  • 是的,而不是试图弄清楚为什么 完全有效的代码 不起作用 - 所有人都开始建议肮脏的解决方法 ;-) 如此如此 ;-)
  • 似乎没有什么对我有用....hmmmm
  • 我在第一条评论中问了 2 个问题。 doesn't work 根本没有帮助。你明白对数组应用trim() 没有意义吗?
  • 另外 - 看看我的回答,我敢打赌它会有所帮助 ;-)

标签: php javascript ajax arrays


【解决方案1】:

您很可能会得到意想不到的结果,因为您将字符串相关函数 trimmysql_real_escape_string 应用于 array $_POST['var_ids']

只要它只是一个整数数组 - 您需要的唯一 mysql 清理就是强制转换为 int:

$ids = array_map('intval', $_POST['var_ids']);
print_r($ids);

【讨论】:

  • 是的,每当我收到 $_POST 时,我总是在不完全了解它的实际作用的情况下对其进行消毒...我需要检查文档以了解它的实际作用并防止不必要的消毒,例如这可能会导致问题。
【解决方案2】:

$_POST['var_ids'] 在您的 PHP 端示例中是一个数组。您只能在字符串而不是数组上调用 trim 和 mysql_real_escape_string。在 php 中试试这个:

$postData = isset($_POST['var_ids'])?$_POST['var_ids']):null;
if(is_array($postData)){
    foreach($postData as $key=>$value){
        $postData[$key] =  mysql_real_escape_string(trim($value));
    }
}

Viola,$postData 现在是一个带有修剪和转义值的 PHP 数组。

【讨论】:

【解决方案3】:

它位于 docs 大约 1/4 处,标题为将数据数组传递到服务器

    var var_ids = new Array('10','12','13');
    var $data = {
    action: "do_something",
    'var_ids[]': var_ids,
    };
    jQuery.post(doajax.ajaxurl, $data, function(response) {
        alert(response);

    }); 

【讨论】:

  • @Jan Kuča:没有[] 也能完美运行 - 试试看吧
  • @Interstellar_Coder: pastebin.com/ADXhrSSN --- 试试这个,看看它在没有 [] 的情况下是否有效
【解决方案4】:

将其设为 json_encoded 数组...然后您就可以正确地 json_decode() 数组了。

【讨论】:

    【解决方案5】:

    将数组转换为 JSON 对象(Javascript 对象表示法)并以这种方式发送会更好。

    Javascript JSON Instructions

    JSON PHP Reference

    【讨论】:

      【解决方案6】:

      您可以使用键 items[] 发布每个项目,然后您可以使用 $_POST['items'] 访问数组,或者您可以序列化数组,发送它并在 PHP 中反序列化(JSON.stringify 和 PHP json_decode )。

      【讨论】:

      • 在这种情况下执行 2 次无意义操作(序列化和反序列化)的任何正当理由?
      猜你喜欢
      • 2020-04-01
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 2012-06-05
      • 2014-04-30
      • 2018-10-03
      相关资源
      最近更新 更多