使用ajax问题发送JSON数据

时间:2014-03-27 05:23:13

标签: 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: false,
    success: function(data){
        alert(data);
    }
});

结果是null。在PHP方面,我有:

echo json_encode($_POST);

print_r($_POST);

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

4 个答案:

答案 0 :(得分:3)

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

       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);
            }
        });

并在cities/index.php中,您可以按照以下方式获取此数据

if($_POST){

         $city=$_POST['City'];
         $age=$_POST['Age'];

         // and do with $city and $age what you want.
         //for return anything thing to `json` use follows we pass $age back to ajax
         echo json_encode($age);

      }

答案 1 :(得分:1)

传递给data的{​​{1}}选项必须是一个简单的对象,jQuery将转换为格式为$.ajax()的字符串,或者它应该是{{1}形式的字符串1}}。

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

key1=value1&key2=value2..

答案 2 :(得分:1)

我猜您不需要对数据进行字符串化,因为数据应该是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);
            }
        });

如jquery官方网站https://api.jquery.com/jQuery.ajax/

中所述
  

数据

     

键入:PlainObject或String

     
    

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

  

答案 3 :(得分:0)

试试这个

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);
            }
        });