Ajax 调用触发错误事件但返回 200 ok

Posted

技术标签:

【中文标题】Ajax 调用触发错误事件但返回 200 ok【英文标题】:Ajax call fires error event but returns 200 ok 【发布时间】:2013-04-20 06:49:50 【问题描述】:
$.ajax(
        url: 'http://intern-dev01:50231/api/language',
        type: 'GET',
        dataType: 'json',
        success: function() 
            console.log('It Works!');
        ,
        error: function (request,status, error) 
            console.log(error);
            alert(status);
        
    );

为什么这个 ajax 调用不起作用?如果我在浏览器中调用它可以正常工作:/。

这是提琴手返回的:

HTTP/1.1 200 OK
Content-Length: 122
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 26 Apr 2013 06:56:40 GMT

["LanguageId":1,"LanguageName":"Dansk","LanguageId":2,"LanguageName":"Tysk","LanguageId":3,"LanguageName":"Engelsk"]

【问题讨论】:

Ajax request returns 200 OK, but an error event is fired instead of success的可能重复 【参考方案1】:

您必须检查 ajax 响应是否有效。当你在 ajax 中指定时:

dataType: 'json',

如果响应无法解析为 JSON,jQuery 将触发错误事件,即使服务器返回 200 OK。检查从服务器返回的数据,确保它是有效的 JSON(尝试 JSONLint 服务)。

如果返回的数据不是 JSON 或存在语法错误,请在您的服务器端代码中修复它们。您可以从服务器端脚本返回 。

也试试这个。

$.ajax(
    url: 'http://intern-dev01:50231/api/language',
    type: 'GET',
    cache: false,        
    complete: function (xhr, status) 
      if (status === 'error' || !xhr.responseText) 
          console.log(error);
          alert(status);
      
      else 
       console.log('It Works!');.
      
            
);

【讨论】:

如果我使用 jsonp 我得到 parseError @user2314110 只需删除 dataType: 'json' 并尝试。请参阅我的编辑答案。 注意:如果响应为空(例如“”),如果dataType设置为json,$.ajax会报错。正如@BharatChodvadiya 所说,如果您删除它应该可以工作的数据类型。【参考方案2】:

由于状态显示为 200 OK,因此出现解析错误。问题在于数据类型:json。要对此进行测试,请删除该行,它应该可以工作。为了解决这个问题,您可以将其更改为数据类型:文本。 See this link too for similar question

【讨论】:

这就是我的 Symfony 动态表单触发错误事件的原因,因为 ajax 请求返回我更新表单的 html !!! 我返回的是纯文本而不是 json。【参考方案3】:

如果您在本地使用不同的 Web 应用和 Web API 应用进行测试,请调试您的应用并测试 API 正确发送数据,应用通过 AJAX 调用 API 并返回数据。

因为在运行应用程序 AJAX 调用时域不相似,因此未命中成功函数。因为浏览器阻止了Cross Site request。如果您在 local 和 debug 中发布这两个应用程序,则可以正常工作。

希望这会对某人有所帮助。

【讨论】:

【参考方案4】:

检查 url 参数并确保它与加载的页面相同。您可能正在执行跨域 ajax 调用。如果您想进行跨域 ajax 调用,请注意允许进行跨域请求的唯一数据类型是“script”和“jsonp”。

在 URL 是 IP 地址并且页面加载了指向该 ip 的域名的开发环境中遇到了这个问题。

【讨论】:

【参考方案5】:

我知道我来晚了,但我遇到了同样的问题,这是 Google 上的热门搜索结果之一。我设法通过在 url 上方移动数据类型来修复它,如下所示:

$.ajax(
    type: 'GET',
    dataType: 'json',
    url: 'http://intern-dev01:50231/api/language',
    success: function() 
        console.log('It Works!');
    ,
    error: function (request,status, error) 
        console.log(error);
        alert(status);
    
);

【讨论】:

它基本上是一个键值对,因此它的预结构化方式并不重要。如果 dataType 键在其他键之前或之后,我认为构建此请求对象的任何内容都不会查看。它只是构造它。这里的目标是找到真正的原因。

以上是关于Ajax 调用触发错误事件但返回 200 ok的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 删除请求返回 200 但触发错误

间歇性 HTTP 403 禁止错误调用相同的 Ajax 代码

JQuery ajax调用在200上执行错误[重复]

AJAX:仅触发错误回调

jQuery Ajax 返回 404 错误,但响应正确

ajax请求成功返回200,但还是进入error事件