【问题标题】:Why php json response does not send back the data array to ajax jquery request?为什么 php json 响应不将数据数组发送回 ajax jquery 请求?
【发布时间】:2016-02-14 14:39:17
【问题描述】:

我已经向 php 服务器发出了一个 ajax 请求,我从表单请求中发送了一个数据,我想从服务器取回相同的数据,只是为了测试客户端和客户端之间抛出的相同数据的请求和响应服务器。

$.ajax({
    method: "POST",
    url: "addRaces",
    dataType: "json",
    data : sending_data,
    success : ...
})

sending_data 是一个类似{field_form_name : value} 的数组

服务器使用以下代码响应请求:

$data = [];
foreach ($request->Input() as $key => $value) {
    $data[$key] = $value;
}

return json_encode($data);

相同的数据应该返回给客户端,但 alert(response) 或显示调试数据的 jquery (如 $('#debug').html(response);)不会发生任何事情

当我尝试像

那样推送服务器答案时出现了奇怪的事情
return json_encode([
  'debug' => $data['name']
]);

并向客户显示结果,例如

$('#debug').html(response.debug);

它适用于单个键值响应,显示我从客户端发送的正确值字段。 否则,我是否将完整的 data 作为数组发送,客户端的调试区域中不会显示任何内容。

【问题讨论】:

  • 您的开发者工具控制台中有任何错误吗?此请求的开发者工具网络中显示了什么?
  • 你应该使用echo json_encode($data);
  • 我使用JSON.stringify() 提取数据作为从服务器接收到的字符串,显示我需要的所有内容。我尝试了来自服务器的echo 指令,但结果没有改变。网络选项卡中的开发人员工具不显示任何错误。我想我可以在 javascript 中使用 JSON 函数来显示来自服务器的答案。

标签: javascript php jquery json ajax


【解决方案1】:

return json_encode($data); 不会工作。因为它将json字符串返回给调用方法,而不是前端的jQuery。不要将前端(html javascript、jQuery 等)与后端(PHP)混淆,它们两者都在不同的机器上运行。一个在客户端,另一个在您的服务器。

你应该使用echo json_encode($data);这将输出json字符串,你的网络服务器会将它发送到前端。

【讨论】:

    【解决方案2】:

    确保您回显的数据没有像@bansi 所说的那样返回,如果您已经回显它,则使用var_dump(json_encode($data)) 进行调试。如果 json_encode() 发现错误,它将返回 False 而不是预期的 json 数组。

    【讨论】:

      【解决方案3】:

      您应该使用开发人员工具进行调试,而不是使用代码 $('#debug').html(response.debug);。开发者工具的 Network 选项卡对于调试 HTTP 请求非常有用,它将显示您的请求的响应头和正文。

      在您的情况下,只需将 return 更改为 echo,例如 @bansi's answerreturn 命令不打印数据,因此您在响应中没有得到任何内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-21
        • 1970-01-01
        相关资源
        最近更新 更多