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

时间:2013-04-26 07:07:50

标签: javascript json api jquery

$.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"}]

5 个答案:

答案 0 :(得分:17)

如果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!');.
      }
    }        
});

答案 1 :(得分:8)

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

答案 2 :(得分:0)

如果您使用其他Web应用程序和Web API应用程序进行本地测试,则调试您的应用程序并测试API正确发送数据,并通过AJAX调用API并返回数据。

因为在运行应用程序时,域名不相似AJAX调用没有达到成功函数。因为浏览器会阻止Cross Site request。如果您在本地和调试中发布这两个应用程序,它的工作正常。

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

答案 3 :(得分:0)

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

在开源环境中遇到此问题,其中URL是IP地址,页面加载了指向该IP的域名。

答案 4 :(得分:-1)

我知道我有点晚了,但我遇到了同样的问题,这是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);
    }
});
相关问题