Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用php发送的JQuery AJAX访问数据_Php_Jquery_Ajax_Json - Fatal编程技术网

用php发送的JQuery AJAX访问数据

用php发送的JQuery AJAX访问数据,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我有一个AJAX: $.ajax({ url : get_base_url() + 'update', type : 'POST', async : false, data : json_positions, dataType : 'html',

我有一个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)
                    }
                });
发送的数据为:

位置

这是一个如下的字符串:

{"new_positions" : [{ "id": "2", "position": "0"},{ "id": "5", "position": "1"},{ "id": "4", "position": "2"}]}
我想在PHP页面中使用json_decode()解码json_位置,但似乎没有将tdata发送到PHP页面,因为当我尝试:

print_r($_POST);

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

因为您正在发送json数据,所以需要定义适当的内容类型:

contentType: 'application/json'
此外,如果您希望返回json数据,请将数据类型更改为json:

dataType : 'json'

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

contentType: 'application/json'
此外,如果您希望返回json数据,请将数据类型更改为json:

dataType : 'json'

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

发送的数据是:
json\u positions
,这是一个如下字符串:

你不应该像传递绳子一样传递它。它应该是一个对象,就像您定义的那样:

{"new_positions" : [{ "id": "2", "position": "0"},{ "id": "5", "position": "1"},{ "id": "4", "position": "2"}]}
确保传递的对象是,而不是字符串,例如,不要在其周围添加任何引号等。这样它就可以正常工作

编辑 根据jQuery文档的$。ajax数据参数

数据对象,字符串 要发送到服务器的数据。如果尚未转换为字符串,则会将其转换为查询字符串。它被附加到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
    });
});

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

发送的数据是:
json\u positions
,这是一个如下字符串:

你不应该像传递绳子一样传递它。它应该是一个对象,就像您定义的那样:

{"new_positions" : [{ "id": "2", "position": "0"},{ "id": "5", "position": "1"},{ "id": "4", "position": "2"}]}
确保传递的对象是,而不是字符串,例如,不要在其周围添加任何引号等。这样它就可以正常工作

编辑 根据jQuery文档的$。ajax数据参数

数据对象,字符串 要发送到服务器的数据。如果尚未转换为字符串,则会将其转换为查询字符串。它被附加到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
    });
});

$\u POST
仅包含键值对内容。您发布的JSON位于
$\u HTTP\u RAW\u POST\u数据中

$\u POST
仅包含键值对内容。您发布的JSON位于
$\u HTTP\u RAW\u POST\u DATA

数据类型用于从服务器发送到客户端的数据,而不是从Ajax发送的数据注意:jQuery实际上智能地猜测
数据类型
参数,但是指定数据类型肯定更安全。数据类型用于从服务器发送到客户端的数据,而不是从ajaxNote发送的数据:jQuery实际上智能地猜测
数据类型
参数,但指定它肯定更安全。它没有任何类型的引号,它是使用:var json_positions='{';json_positions+='创建的“新位置”:['$.each(结果、函数(键、值){var value_splitted=value.split('-');json_positions+='{“id”:“+value_splitted[1]+',“position”:“+key+'”;if(键!=result.length-1){json_positions+=',“;});好的,这就是我所说的。您应该将对象作为数据传递,而不是字符串。因此,不要创建字符串,而是创建一个对象。它没有任何类型的引号,而是使用:var json_positions='{';json_positions+=''new_positions:['$。each(result,function(key,value){var value_splited=value.split('-';json_positions+='{“id”:“+value_splitted[1]+',“position”:“+key+''}”;if(key!=result.length-1){json_positions+=',“;}}”);好的,这就是我要说的。你应该将对象作为数据传递,而不是字符串。因此,不创建字符串,只创建对象。