使用php发送的JQuery AJAX访问数据

时间:2012-02-04 15:23:06

标签: php jquery ajax json

我有这个AJAX:

                $.ajax({
                    url : get_base_url() + 'update',
                    type : 'POST',
                    async : false,
                    data : json_positions,
                    dataType : 'html',
                    success : function(data) {
                        console.log(data);
                    },
                    error : function(jqXHR, textStatus, errorThrown) {
                        console.log('error:');
                        console.log(jqXHR);
                        console.log(textStatus);
                        console.log(errorThrown)
                    }
                });

发送的数据是:

  

json_positions

这是一个像这样的字符串:

{"new_positions" : [{ "id": "2", "position": "0"},{ "id": "5", "position": "1"},{ "id": "4", "position": "2"}]}

我想在PHP页面中使用json_decode()解码json_positions,但似乎tdata没有发送到php页面,因为当我尝试:

print_r($_POST);

它使用console.log(数据)返回一个空数组。

3 个答案:

答案 0 :(得分:2)

你的代码没问题,不需要改变任何东西。但这就是你传递数据的方式。

  

发送的数据是:json_positions这是一个像这样的字符串:...

你不应该像 string 那样传递它。它应该是一个对象,就像你诋毁它一样:

{"new_positions" : [{ "id": "2", "position": "0"},{ "id": "5", "position": "1"},{ "id": "4", "position": "2"}]}

确保传递对象,而不是字符串,例如不要在它周围添加任何引号等等。它会正常工作。

修改

根据 $。ajax数据参数的jQuery文档:

  

dataObject,String   要发送到服务器的数据。如果不是字符串,它将转换为查询字符串。它附加到GET请求的URL。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery会根据传统设置的值使用相同的键序列化多个值(如下所述)。

因此,您的数据应该是查询字符串或对象。

在你的情况下,我建议使用对象。与此代码一样:

var json_positions = {
    new_positions: []
};
$.each(result, function(key, value) {
    var value_splitted = value.split('-');
    json_positions.new_positions.push({
        id: value_splitted[1],
        position: key
    });
});

答案 1 :(得分:1)

由于您要发送json数据,因此需要定义适当的内容类型:

contentType: 'application/json'

另外,如果您希望返回json数据,请将dataType更改为json:

dataType : 'json'

答案 2 :(得分:0)

$_POST仅包含键值对。您的POSTed JSON位于$_HTTP_RAW_POST_DATA