【问题标题】:Why $.ajax() 'error' function is invoked when the response status is 200/OK?为什么响应状态为 200/OK 时调用 $.ajax() 'error' 函数?
【发布时间】:2013-03-24 05:45:59
【问题描述】:

我正在尝试使用 JQuery $.ajax() 从我的 WebAPI 中“获取”数据。这是我的代码:

$.ajax({
              type: "GET",
              url: "http://localhost:62412/api/RandomData?startTime=2013-02-23%2005%3A00%3A00&callback=?",                                
              dataType: "jsonp",                 
              success: function (data) {
                  alert("success");
              },
              error: function (errorData) {                 
                alert("fail");
              }// When Service call fails
          });

我可以看到 WebAPI 工作正常并成功返回数据。但在客户端,我总是收到“失败”警报。我可以在 firebug 中看到数据。

谁能告诉我为什么响应状态为“200”时会调用“错误”函数?

【问题讨论】:

  • 能否把服务器返回的数据贴一下?
  • [{"ID":"002940","Name":"William","Latitude":31.56,"Longitude":-87.0},{"ID":"002940"," Name":"Brian","Latitude":31.56,"Longitude":-86.98}]这是我从服务器获取的JSON。

标签: jquery asp.net-web-api jsonp


【解决方案1】:

返回的代码不是 JSONP。它是简单的 JSON。

在 jsonp 中,服务器必须将 JSON 对象作为函数的参数返回,并将名称作为回调参数提供。

在你的配置中,如果发送给服务器的回调参数是'example',服务器必须回答

example( json code here )

不只是

json code here

就像现在一样。

使用$.ajax 函数,您不必在客户端指定回调函数名称,但服务器必须遵守它。

【讨论】:

  • 我必须使用 JSONP,因为我得到“Access-Control-Allow-Origin 不允许 Origin null”。错误。
  • 我认为我的错误的原因是我没有“托管”网页。我只是用浏览器打开的。所以,JSON 工作正常。感谢您的帮助。
【解决方案2】:

如果下载的数据不是有效的 json 数据并且可以正确解析,$.ajax 调用可能会失败。

更改错误回调并查看错误信息:

error: function (data, msg) {                 
            console.log(msg)
          }

【讨论】:

  • 是的,它是'parseerror'。但我检查了我的 JSON,它是有效的。还有什么可能导致此错误?
  • 服务器没有调用你的回调函数。接收到的有效载荷应该类似于 callback_function([JSON_DATA])。检查此链接 (en.wikipedia.org/wiki/JSONP)
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多