Php 使用ajax问题发送JSON数据

Php 使用ajax问题发送JSON数据,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我有以下代码: var arr = {City:'Moscow', Age:25}; $.ajax({ url: "<? echo $this->createUrl('cities/index');?>", type: "POST", data: JSON.stringify(arr), contentType: "application/json; charset=utf-8", dataType: "json", async

我有以下代码:

var arr = {City:'Moscow', Age:25};

$.ajax({
    url: "<? echo $this->createUrl('cities/index');?>",
    type: "POST",
    data: JSON.stringify(arr),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    async: false,
    success: function(data){
        alert(data);
    }
});


但是两者都给出了空结果(也检查了Firebug)。

传递给
$的
数据
选项。ajax()
必须是一个简单的对象,jQuery将转换为格式为
key1=value1&key2=value2..
的字符串,或者它应该是格式为
key1=value1&key2=value2..
的字符串

在您的情况下,可以通过传递对象本身并让jQuery执行查询字符串格式化来解决此问题:

$.ajax({
    ...
    data: arr,
    ...
});

传递给
$.ajax()
data
选项必须是一个简单的对象,jQuery将其转换为
key1=value1&key2=value2..
格式的字符串,或者应该是
key1=value1&key2=value2..
格式的字符串

在您的情况下,可以通过传递对象本身并让jQuery执行查询字符串格式化来解决此问题:

$.ajax({
    ...
    data: arr,
    ...
});

我想您不需要严格地处理数据,因为数据应该是PlainObject或String,但在您的情况下,您可以像下面这样简单地编写

var arr = {City:'Moscow', Age:25};

       $.ajax({
            url: "<? echo $this->createUrl('cities/index');?>",
            type: "POST",
            data: arr,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function(data){
                alert(data);
            }
        });
var-arr={城市:莫斯科,年龄:25};
$.ajax({
url:“”,
类型:“POST”,
数据:arr,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
async:false,
成功:功能(数据){
警报(数据);
}
});
正如jquery官方网站中记录的那样

资料

类型:PlainObject或String

要发送到服务器的数据。如果需要,它将转换为查询字符串 还不是字符串。它被附加到GET请求的url。看见 processData选项以阻止此自动处理。对象必须 必须是键/值对。如果值是数组,jQuery将序列化多个 基于传统设置值的具有相同键的值 (如下所述)


我想您不需要严格地处理数据,因为数据应该是PlainObject或String,但在您的情况下,您可以像下面这样简单地编写

var arr = {City:'Moscow', Age:25};

       $.ajax({
            url: "<? echo $this->createUrl('cities/index');?>",
            type: "POST",
            data: arr,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function(data){
                alert(data);
            }
        });
var-arr={城市:莫斯科,年龄:25};
$.ajax({
url:“”,
类型:“POST”,
数据:arr,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
async:false,
成功:功能(数据){
警报(数据);
}
});
正如jquery官方网站中记录的那样

资料

类型:PlainObject或String

要发送到服务器的数据。如果需要,它将转换为查询字符串 还不是字符串。它被附加到GET请求的url。看见 processData选项以阻止此自动处理。对象必须 必须是键/值对。如果值是数组,jQuery将序列化多个 基于传统设置值的具有相同键的值 (如下所述)

试试这个

var arr = {City:'Moscow', Age:25};

       $.ajax({
            url: "<? echo $this->createUrl('cities/index');?>",
            type: "POST",
            data: arr,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function(data){
                alert(data);
            }
        });
var-arr={城市:莫斯科,年龄:25};
$.ajax({
url:“”,
类型:“POST”,
数据:arr,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
async:false,
成功:功能(数据){
警报(数据);
}
});
试试这个

var arr = {City:'Moscow', Age:25};

       $.ajax({
            url: "<? echo $this->createUrl('cities/index');?>",
            type: "POST",
            data: arr,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function(data){
                alert(data);
            }
        });
var-arr={城市:莫斯科,年龄:25};
$.ajax({
url:“”,
类型:“POST”,
数据:arr,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
async:false,
成功:功能(数据){
警报(数据);
}
});

您还可以在Ajax中设置
数据类型
,以指定内容类型,如下所示

       var city='city name';
       var age=10; 

       $.ajax({
            url: "<? echo $this->createUrl('cities/index');?>",
            type: "POST",
            data:"City="+city+"&Age="+age,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function(data){
                alert(data);
            }
        });

您还可以在Ajax中设置
数据类型
,以指定内容类型,如下所示

       var city='city name';
       var age=10; 

       $.ajax({
            url: "<? echo $this->createUrl('cities/index');?>",
            type: "POST",
            data:"City="+city+"&Age="+age,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function(data){
                alert(data);
            }
        });

Remove
JSON.stringify
Remove
JSON.stringify
我还有一个问题。我将对象替换为数组,var arr=[1,2,3]。。。和。。数据:JSON.stringify(arr)。。但是它没有发送,我也尝试了没有stringfy。看看这个,它可能会帮助你@Sarvarisonboyev我知道了,它帮了很多。伟大的很高兴它有帮助:)别忘了在所有你觉得有用的答案中标记为答案@SarvarisonBoyevi我还有一个问题。我将对象替换为数组,var arr=[1,2,3]。。。和。。数据:JSON.stringify(arr)。。但是它没有发送,我也尝试了没有stringfy。看看这个,它可能会帮助你@Sarvarisonboyev我知道了,它帮了很多。伟大的很高兴它有帮助:)别忘了在所有你觉得有用的答案中标记为答案@Sarvarisonboyev