Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.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 如何使用AJAX和JSON发送和接收_Php_Javascript_Jquery_Ajax_Json - Fatal编程技术网

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

Php 如何使用AJAX和JSON发送和接收,php,javascript,jquery,ajax,json,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"

我试图设置一个简单的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)
      }
    })
服务器端:

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

PHP接收的数据不需要解码,因为它已经是一个数组。只要把你的函数改成这个,你就会没事了

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

另外,因为您已经说过jQuery的响应是json,所以不需要调用$.parseJSON()来获取数据,PHP接收的数据不需要解码,因为它已经是一个数组了。只要把你的函数改成这个,你就会没事了

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

另外,因为您已经说过jQuery的响应是json,所以没有必要调用$.parseJSON()来获取数据

这里有一个概念上的错误

当您说
dataType:'json'
时,意味着返回的数据是json格式的

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

public function fetchAddress(){
    echo $_POST['json'];
}
获取数据

要在另一端拾取,您有一个预传递的对象(因为数据以JSON的形式返回)

所以

(哦,你的数据不是一个字符串(这是一篇文章所期望的),JSON是如此的干净,它变成了一个漂亮的字符串

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

这里有一个概念上的错误

当您说
dataType:'json'
时,意味着返回的数据是json格式的

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

public function fetchAddress(){
    echo $_POST['json'];
}
获取数据

要在另一端拾取,您有一个预传递的对象(因为数据以JSON的形式返回)

所以

(哦,你的数据不是一个字符串(这是一篇文章所期望的),JSON是如此的干净,它变成了一个漂亮的字符串

json: '{"Id":"0","Name":"Jim"}'
该调用将数据作为数组发送,并期望返回的数据作为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)
      }
    });
该调用将数据作为数组发送,并期望返回的数据作为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)
      }
    });

您有两个问题,都与数据类型有关。您的服务器端代码期望
json
POST参数为字符串,而不是。您的jQuery AJAX调用期望服务器的响应为有效的json,而不是。您有两个问题,都与数据类型有关。您的服务器端代码期望
json
POST参数是字符串,而不是。jQuery AJAX调用期望服务器的响应是有效的JSON,而不是。Haste是一个糟糕的顾问…修复了:)Haste是一个糟糕的顾问…修复了:)谢谢,将其设置为字符串排序。我现在明白了!谢谢,将其设置为字符串排序。我现在明白了!