【问题标题】:Why is JQuery ajax call ignoring PUT response JSON?为什么 JQuery ajax 调用忽略 PUT 响应 JSON?
【发布时间】:2014-02-17 19:51:38
【问题描述】:

我有以下电话:

var params={type:"PUT", dataType:"application/json; charset=UTF-8", url:"api/servletpat", data:JSON.stringify(dataObject)};
$.ajax(params)
    .done(function(data, status, jqXHR){
        successCallback(data);
    })
    .fail(function(jqXHR, status, thrown){
        if (jqXHR.status == 200){
            successCallback(null);
        }
    });

虽然服务器确实发送了 JSON 响应,但 ajax 执行了 jqXHR.status = 200 的 .fail 案例。这意味着返回的数据不可访问。我不能使用“GET”,因为 GET 在 URL 中对提交的对象进行编码,这是不可接受的。 我需要做什么才能读取返回的 JSON 对象? 谢谢...

【问题讨论】:

  • 我原以为 POST 将是 GET 之后的下一个逻辑
  • 浏览器控制台中的任何错误
  • 应该是服务器端错误
  • user2310289,我遵循 API 指南,其中 POST 用于添加新对象,PUT 用于更新现有对象,GET 用于检索对象和元数据。
  • Arun P Johny,Emilio Gort,没有错误服务器或客户端。服务器执行 PUT,并返回正确的返回对象和成功的 HTTP 状态 (200)。唯一的问题是 JQuery 的 ajax 调用将此报告为失败(仍处于成功状态)。

标签: jquery ajax json put


【解决方案1】:

您正在为 dataType 设置指定无效值。这会导致调用.fail 回调(而不是.done 回调),即使jqXHR.status 是200。.fail 回调函数的第二个参数(“textStatus”参数)将是@987654328 @。

jsfiddle demo that fails

你应该有:

contentType: "application/json; charset=UTF-8",
dataType: "json",

jsfiddle demo that succeeds

使用contentType 设置,您可以指定ajax 请求的内容类型。当您将dataType 设置为"json" 时,您是在告诉jQuery 响应将是JSON。这会导致 jQuery 在将响应作为 data 参数传递给 .done 回调函数之前自动将响应解析为对象(或数组或 null)。

【讨论】:

    【解决方案2】:

    TYPE 必须是 GET 或 POST

    【讨论】:

    • 这是从某个地方引用的吗?
    • @john Nope.not a quote
    【解决方案3】:

    status 200 表示正常,不是数据不可访问 http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      相关资源
      最近更新 更多