如何通过POST AJAX将JS数组传递给PHP?

时间:2012-02-16 22:14:46

标签: php javascript ajax arrays

这是我的代码:

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?

谢谢。

6 个答案:

答案 0 :(得分:2)

您很可能会收到意外结果,因为您将与字符串相关的函数trimmysql_real_escape_string应用于数组 $_POST['var_ids']

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

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

答案 1 :(得分: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数组。

答案 2 :(得分:1)

它位于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);

    }); 

答案 3 :(得分:1)

使它成为json_encoded数组...然后你可以正确地json_decode()数组。

答案 4 :(得分:1)

您可以更好地将数组转换为JSON对象(Javascript Object Notation)并以此方式发送。

Javascript JSON Instructions

JSON PHP Reference

答案 5 :(得分:0)

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