如何使用AJAX和JSON发送和接收

时间:2013-03-14 11:49:54

标签: php javascript jquery ajax json

我正在尝试设置一个简单的AJAX调用,通过JSON将其数据发送到我的PHP脚本,然后返回数据。

但我没有运气。

以下是我的发送代码:

$.ajax({
      url: ROOT+'Address/fetchAddress',
      type: 'POST',
      async: false,
      dataType: 'json',
      data: {
        json: {
          "Id":"0",
          "Name":"Jim"
        }
      },
      error: function(a, b)
      {
        alert(b)
      },
      success: function(data)
      {
        data = $.parseJSON(data);
        alert(data)
      }
    })

了Serverside:

public function fetchAddress()
  {
    $JSON = $_POST['json'];
    echo json_decode($JSON);
  }

但我在警报框中收到“parseerror”,如果我检查了响应,我得到了:

Warning: json_decode() expects parameter 1 to be string, array given in ...public_html\controllers\Address.php on line 20

3 个答案:

答案 0 :(得分:3)

这里存在概念上的错误。

当您说dataType: 'json'时,表示返回的数据是JSON格式。

您仍然在POST数组中发送数据

public function fetchAddress(){
    echo $_POST['json'];
}

获取数据

要在另一侧拿起一个预先传递的对象(因为数据以JSON形式返回)

所以

success: function(data)
  {

    alert(data.id+"NAME"+data.name);
  }

(哦,你的数据不是一个字符串(这是一篇文章所期望的),而JSON是如此简洁,直到很好的字符串

json: '{"Id":"0","Name":"Jim"}'

答案 1 :(得分:1)

PHP收到的数据不需要解码,因为它已经是一个数组。只需将您的功能更改为此,就可以了。

public function fetchAddress()
{
  echo json_encode($_POST['json']);
}

另外,既然你说jQuery你的响应是json,那么就不需要为你的获取数据调用$ .parseJSON()

答案 2 :(得分:1)

ajax调用将数据作为数组发送,并期望返回的数据为JSON,因此PHP函数应该看起来像

public function fetchAddress()
{
    $data = $_POST['json'];
    echo json_encode($data);
}

并且客户端不需要解码返回的数据,因为它指定了dataType: 'json'然后这已经由ajax函数

完成了
$.ajax({
      url: ROOT+'Address/fetchAddress',
      type: 'POST',
      async: false,
      dataType: 'json',
      ...
      success: function(data)
      {
        alert(data)
      }
    });