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

5 回答 5

20

您必须检查 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!');.
      }
    }        
});
于 2013-04-26T07:18:06.160 回答
8

由于状态显示为 200 OK,因此存在解析错误。问题在于数据类型:json。要对此进行测试,请删除该行,它应该可以工作。为了解决这个问题,您可以将其更改为数据类型:文本。有关类似问题,请参见此链接

于 2015-06-09T11:21:28.193 回答
0

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

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

于 2017-07-31T15:57:01.637 回答
0

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

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

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

于 2016-08-11T07:52:57.337 回答
-1

我知道我来晚了,但我刚刚遇到了同样的问题,这是谷歌上的热门搜索结果之一。我设法通过在 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);
    }
});
于 2016-02-15T20:31:39.823 回答