【问题标题】:Error reciving json at server side using ajax使用 ajax 在服务器端接收 json 时出错
【发布时间】:2015-08-24 08:52:01
【问题描述】:

我正在尝试将带有 ajax 的 json 发送到 php 文件,因为我在下面的代码中尝试过

  1. 使用 jquery

    var dummyData = {'bob': 'foo', 'paul': 'dog'};
    var ajaxRequest = $.ajax({
            url: "json_handler.php",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(dummyData ),
            dataType: "json"
        });
        ajaxRequest.done(function (response, textStatus, jqXHR) {
            console.log(response + textStatus + jqXHR);
            alert('sd');
        });
    
        ajaxRequest.fail(function (e) {
            console.log(e);
    
        });
    

我只是在json_handler.php 处做var_dump($_REQUEST) 并且ajax 请求一直失败并且在响应文本中什么也得不到

当我尝试时

$json = file_get_contents('php://input');
var_dump($json);

我得到了 json,但 ajax 请求仍然失败。

我也试过做这个javascript,我的代码在下面

var httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = stateHandler;
httpRequest.open("POST", "json_handler.php", true);
httpRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
httpRequest.send( JSON.stringify(dummyData ));

这是我的控制台日志

【问题讨论】:

  • 我在请求中看到状态 200。你到底想做什么?
  • 我也看到了 200,但是为什么使用 jquery 的请求失败了,我没有从 done 方法得到警报,还有为什么我必须 file_get_contents('php://input'); 来获取 json
  • php文件为空时会报错吗?
  • 不,我没有收到任何错误
  • 你的 php 文件想做什么?

标签: javascript php jquery ajax json


【解决方案1】:

看到因为你的 ajax 有 dataType: "json" 所以它期待以 json 格式的响应,就像 {key:value} or [{k:v}, {k:v}, ....] 而你不是 echoing 任何 json 结构所以这是你的 ajax 失败的地方。

在我看来你必须这样写:

$json = file_get_contents('php://input');
echo json_encode($json);

【讨论】:

  • 感谢它现在工作正常,但为什么我必须使用 file_get_contents 而不仅仅是 $_REQUEST
  • 那是因为你已经改变了 ajax 代码 contentType: "application/json; charset=utf-8", 中的标题,如果你这样做,那么你必须使用 file_get_contents 因为 php 原生支持 formurlencoded 查询字符串。 This will help you understanding it.
  • 所以你的意思是,如果我不使用 application/json; 标头并且我是 stringfy json 它应该可以工作
  • 如果你删除了application/json,那么你就不必对任何一个ajax进行触发,只需要传递一个对象data:{k:v}就足够了。
  • 我已经尝试过$.ajax({ url: "ajax.php", type: "POST", data: JSON.stringify(serData), }); 现在我没有在服务器上获取数据,但是当我通过file_get_contents 获取数据时它正在工作
【解决方案2】:

您的请求看起来不错,但为什么要将 JSON 字符串化?

您可以发布有效载荷数据:

data: dummyData

要调试和测试您的 json 帖子,您可以使用扩展作为 Postman 或 Advanced Rest Client。

【讨论】:

    猜你喜欢
    • 2014-05-20
    • 2015-07-21
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多