我正在发出AJAX请求并发送一些JSON:

 $(function() {
     var json = [{"id":"1", "area":"south"}, {"id":"2", "area":"north"},{"id":"3", "name":"east"},{"id":"1", "name":"west"}];

     jQuery.ajax({
         url: "index.php",
         type: "POST",
         data: {areas: JSON.stringify(json) },
         dataType: "json",
         beforeSend: function(x) {
             if (x && x.overrideMimeType) {
                 x.overrideMimeType("application/j-son;charset=UTF-8");
             }
         },
         success: function(result) {
         alert(result);
         }
     });


然后我试图在另一端使用json_decode将其解码为对PHP有用的东西:

<?php
    if(isset($_POST['areas'])) {
        $json = $_POST['areas'];
        $obj = json_decode($json);
        var_dump($obj);
        exit;
    }
?>


AJAX帖子变得很好,如果我在if(isset$_POST)内放回声,我会把它放回去,因此似乎已经发送出去了。但是我只能从代码中返回Null。谁能看到我所缺少的吗?

最佳答案

我相信您可以将json数组直接传递给AJAX函数,并跳过JSON.stringify函数调用:

$(function() {
     var json = [{"id":"1", "area":"south"}, {"id":"2", "area":"north"},{"id":"3", "name":"east"},{"id":"1", "name":"west"}];

     jQuery.ajax({
         url: "index.php",
         type: "POST",
         data: {areas: json },
         dataType: "json",
         beforeSend: function(x) {
             if (x && x.overrideMimeType) {
                 x.overrideMimeType("application/j-son;charset=UTF-8");
             }
         },
         success: function(result) {
             alert(result);
         }
    });
});



更新

如果这是运行$_POST['area']之前PHP脚本的json_decode变量的输出,请执行以下操作:

Array (
    [0] => Array ( [id] => 1 [area] => south )
    [1] => Array ( [id] => 2 [area] => north )
    [2] => Array ( [id] => 3 [name] => east )
    [3] => Array ( [id] => 1 [name] => west )
)


然后,您不需要运行json_decode,因为您已经有了所需的对象。

关于php - 通过jQuery Ajax发送JSON不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8978192/

10-09 17:53
查看更多