【问题标题】:How can I post a JSON string to the server via jQuery $.ajax()?如何通过 jQuery $.ajax() 将 JSON 字符串发布到服务器?
【发布时间】:2014-04-27 12:22:28
【问题描述】:

我有一个在 JavaScript 中“字符串化”的 JSON 对象,我想发布到服务器。

我正在使用仅打印$_POST 数组的简单PHP 脚本对此进行测试。不幸的是,它总是空的。我错过了什么?

myJsonFile.json

{"glossary":{"title":"example glossary","GlossDiv":{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}}}

post-json.js

$.get('myJsonFile.json',function(myJsonString) {
    // other stuff happens here, I promise :)
    console.log(myJsonString); // looks like a nicely formed json object to me
    $.ajax({
        type: 'POST',
        url: 'view-json.php',
        data: {json: JSON.stringify(myJsonString)},
        success: function(data) {
            // success message
        },
        dataType: 'json',                // These are the offending lines. Remove.
        contentType: 'application/json'  // Thanks A.Wolff!
    });
},'json');

view-json.php // 总是空数组

<?php print_r($_POST); ?>

【问题讨论】:

  • 如何检查$_POST 是否为空?
  • 好问题,我正在使用 Google Chrome 开发人员工具,检查“网络”选项卡,单击 post-json.php 条目并查看响应。在标头中,我可以看到请求有效负载显示 json 对象已发送:json=%7B%221%22%3A%7B%22id%22%3A1%2C%22...,但响应始终为:Array()。另外,我的成功信息显示,嗯,成功了。
  • 至少尝试删除dataType: 'json'(你在这里没有返回json,所以内部解析会抛出错误)和内部成功回调使用console.log(data);
  • 也尝试删除contentType
  • 谢谢。 dataType 已删除,console.log(data) 已添加。 Console.log(data) 也返回Array()

标签: javascript jquery ajax json


【解决方案1】:

使用contentType 指定您发送到服务器的数据类型。您将其设置为 json 但您没有使用 JSON 表示法发送 javascript 对象,因此服务器拒绝请求(我不确定每个服务器如何处理它)。 dataType 也可以这样说,而您的服务器没有返回 JSON。

【讨论】:

    猜你喜欢
    • 2014-11-23
    • 2017-05-05
    • 2011-09-13
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    相关资源
    最近更新 更多