Javascript 使用ajax在服务器端接收json时出错

Javascript 使用ajax在服务器端接收json时出错,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,我正在尝试用ajax将json发送到php文件,我已经尝试了下面的代码 使用jquery var dummyData = {'bob': 'foo', 'paul': 'dog'}; var ajaxRequest = $.ajax({ url: "json_handler.php", type: "POST", contentType: "application/json; charset=utf-8", data: JSON.s

我正在尝试用ajax将json发送到php文件,我已经尝试了下面的代码

  • 使用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\u handler.php上做
    var\u dump($\u 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 ));
    
    这是我的控制台日志


    请看,因为您的ajax具有
    数据类型:“json”
    ,所以它希望得到
    json
    格式的响应,就像
    {key:value}或[{k:v},{k:v},….]
    一样,并且您没有
    回送任何json结构,所以这就是ajax失败的地方

    在我看来,你必须这样写:

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

    您的请求似乎很好,但为什么要将JSON字符串化

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

    data: dummyData
    
    要调试和测试json post,可以将扩展用作Postman或高级Rest客户端


    我在请求中看到状态200。你到底想做什么?我也看到了200,但是为什么jquery的请求失败了,我没有从done方法得到警告,为什么我必须
    文件获取内容('php://input');
    获取JSOND如果php文件为空,是否会出现错误?不,我没有收到任何错误您的php文件试图做什么?感谢它现在工作正常,但为什么我必须使用file\u get\u contents而不仅仅是$\u requests这是因为您更改了ajax代码
    contentType:“application/json;charset=utf-8”中的标题,
    如果执行此操作,则必须使用
    file\u get\u contents
    ,因为php本机支持
    formurlencoded
    查询字符串。你是说如果我不使用
    application/json头,由于我是stringfy json,它应该可以工作如果您删除
    application/json
    ,那么您不必太麻烦,ajax只需要传递一个对象
    data:{k:v}
    就足够了。我已经尝试了
    $.ajax({url:ajax.php),键入:“POST”,data:json.stringify(serData),})
    现在我不是在服务器上获取数据,而是在通过
    文件获取数据时,获取其内容