【问题标题】:jQuery POST Request - returning JSONjQuery POST 请求 - 返回 JSON
【发布时间】:2013-02-28 08:32:45
【问题描述】:

我想使用 jQuery $.ajax 进行 POST 调用,发送一些信息(通过 POST,例如:page.aspx?var1=value....)。

但我也希望 jQuery 处理服务正在返回 JSON,以便我返回一个 JSON 对象。

var data = {name: _name, ...};

var request = $.ajax({
    url: url,
    type: "post",
    data: data,
    //dataType: "json"
});

只要我使用dataType: "json",它允许我接收 JSON 对象,我就会在请求中收到一个解析错误!

希望你能帮我解决这个问题!

提前致谢!

【问题讨论】:

  • 你得到的确切错误是什么?
  • 如果您遇到解析错误,这可能意味着您的 JSON 无效。您可以粘贴返回的 JSON 字符串吗?语法很可能在某个地方被破坏了。
  • 你可以在请求中设置一个像“Content-Type: application/json”这样的头部,jQuery会自动知道它得到了什么。
  • 除非他们定义了一种方法,否则您无法控制服务器将发送回您的内容。那么,您是应该向他们发送 JSON 格式的表单,还是应该发送标准的 POST 对象?下一个问题 - 服务器将什么格式定义为响应?
  • 天哪。你们真的很快!我想我找到了问题所在。我在想 parseError 是因为它试图将我的 POST 数据解析为 json,但实际上有一个格式不正确的 json 从服务器返回!!! :) 我是对的,dataType: 'json' 是接收 json 对象的设置,而 type: 'post' 允许我使用任何数据进行正常的 POST 调用.. 对吗?!非常感谢您的快速回复和帮助!

标签: jquery ajax json post


【解决方案1】:

您必须从请求的 url 以 JSON 格式制作数据 喜欢

echo json_encode($response);

然后您将在成功函数中获得响应 JSON,如下所示:

       $.ajax({
            type:"POST",
            url: "your_url",
            data:data,
            success: function (response){
                var arr = $.parseJSON(response);

            }
        });

【讨论】:

  • 根据我自己的经验,在调用浏览器原生 JSON 解析器而不是使用 jQuery 库进行解析时,我得到了最好的结果。所有现代浏览器现在都支持这种方法,使其成为一种更好的跨浏览器兼容性方法。 var arr = JSON.parse(response);
【解决方案2】:

确保您的服务器端脚本返回编码的 json。

在 php 中使用json_encode()

echo json_encode($response);

还在$.ajax 调用中设置dataType : 'json'

【讨论】:

  • 正确的方法是通过header('Content-type: application/json'); 在您的POST 文件中设置标题...这会强制服务器将其识别为json。那时不需要dataType:json
  • @LifeInTheGrey 不是 jQuery 在设置 dataType 时所做的吗?
  • @barts 它肯定会尝试,但它只是成功的一部分时间。保证正确的 PHP 标头声明在 100% 的时间内有效。出于性能原因,使用服务器端 PHP 代码而不是 javascript 代码不是更有意义吗?
  • @LifeInTheGrey dataType: 'json',表示响应类型是 JSON 如果您的 PHP 脚本正确设置 Content-Type: application/json 响应头,则不需要它。否则需要它。
  • @DipeshParmar 的重点是通过在 PHP 中声明标头可以避免不必要的 Javascript。这意味着后端有保证的结果,前端的处理速度更快。但这只是一个最佳实践建议,我们非常欢迎您按照自己的意愿去做。
【解决方案3】:

First-post 请求没有在 URL 后附加参数。您指定的格式用于 GET 请求。 您可以通过以下方式实现相同的目标:

$.post(
'/yourURLL',
{'data' : dataJson},
function(data){
    handleIncomingJSON(data);
}).error(function(data, textStatus){handleUnsuccessfulSave(data, textStatus)});

【讨论】:

    【解决方案4】:

    根据jQuery $.post documentation,我强烈建议最初实施所有主要的回调方法(donefailalways),这样如果您的 JSON 响应出现错误,它们就不会被隐藏:

    var jqxhr = $.post( 
        "example.php", 
        function(response) {var arr = JSON.parse(response);},
        'json'
    )
    .done(function() {console.log( "second success" );})
    .fail(function() {console.log( "error" );})
    .always(function() {console.log( "finished" );});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2023-04-05
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多