我读过很多关于 ajax 问题的帖子,但我仍然不知道是什么导致了我的问题:
我正在尝试通过 ajax 调用 RESTful 服务(内部)来获取大的 json 字符串。
编辑:这就是我现在解决问题的方法 - 我知道这不是一个很好的解决方案,但由于我现在无法更改网络服务上的任何内容,这就是我使用的:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
<script>
jQuery(document).ready(function(){
jQuery.support.cors = true;
jQuery.ajax({
url: "<internalPage>",
dataType: 'json'
})
.error(function(xhr, err, status) {
console.log(xhr + err + status);
})
.then(function(data) {
alert("success for me");
$.each(data.portalServices, function(index, value) {
$("#someId").append('<li>' + value.name + '</li>');
});
});
});
</script>
</head>
<body>
<ul id="someId"></ul>
</body>
</html>
编辑:这只适用于 IE,不适用于 FF。
警报内容如下: Ajax 错误 类型:获取 请求页面: 状态:0 - 错误 抛出错误:
但是在 Firebug 中:
Response-Header
Content-Type application/json
Date Thu, 06 Mar 2014 07:44:32 GMT
Server Apache-Coyote/1.1
Transfer-Encoding chunked
Anfrage-HeaderQuelltext anzeigen
Accept application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Cache-Control no-cache
Connection keep-alive
Host xxxxxx
Origin null
Pragma no-cache
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0
Responce-Header from Cache
Content-Type application/json
Date Thu, 06 Mar 2014 07:44:32 GMT
Server Apache-Coyote/1.1
Transfer-Encoding chunked
状态为 200 OK 响应是一个有效的 Json(真的,我已经在线验证过) {"portalServices":[{"articleID":"ABR_1043024010","name":"SK04 托管服务器:Citrix Basisservice","portalname":"zentrale Arbeitsplatz-Umgebung (Citrix-Basis)","preis":18.0000, "beschreibung":"Mit diesem Produkt stellen wir Ihnen eine zentrale Arbeitsplatz-Umgebung (auf der Basis von Citrix) bereit, die folgende Komponenten ....
但是没有 JSON 选项卡。
当我使用缓存 false 时,Firebug 不会向我显示响应,警报中显示的错误如下:
Ajax Error
Type:GET
Requesting Page: <internalPage>
Status: 0 - Exception ..."Failure" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location "JS frame :: <link to jquery> :: .send :: line 6 " data: no .....
我还尝试了对另一个服务(“http://rest-service.guides.spring.io/greeting ”)的 ajax 调用,结果成功。 firebug 中有一个 JSON 选项卡,但这可能是因为从该站点返回的 json 不是像从我的内部站点 webservice 返回的 json 那样的对象列表。
有什么想法吗?我认为网络服务可能有问题,但如果您能得到一些线索可能是什么原因,那就太好了。 非常感谢。
即使使用以下内容,它仍然无法正常工作=/
headers: {'Access-Control-Allow-Origin': '<internalPage>'},
dataType: 'jsonp',
crossDomain: true
internalPage不在同一域中,但不会响应外部网络的请求。对 Spring 服务的调用确实有效,无需明确允许跨域或像上面那样设置 header 。
我会按照这里的建议尝试parsererror after jQuery.ajax request with jsonp content type然后回来告诉它是否有效。
编辑:WebServices 将来将会更改,以便我可以使用 jsonp 而不是强制 jQuery 允许跨域 Ajax 调用。
编辑:WebService 已更改,因此现在它可以与 jsonp 数据类型正常工作。 =)
感谢您的帮助。
最佳答案
您确定此请求导致了错误吗? $(document).ajaxError
是一个全局错误处理程序(在任何错误时调用),因此可能是您有不同的 ajax 调用导致它
您可以将代码更改为:
jQuery.ajax({
url: "http://<internalPage",
dataType: 'json'
})
.error(function(xhr, err, status) {
console.log(xhr + err + status);
})
.then(function(data) {
alert("success for me");
});
尝试不同的浏览器,即 Chrome,可能是您的某些扩展程序导致了问题
您是否使用相同的网址,即不发出跨域请求? jQuery Call to WebService returns "No Transport" error
关于jQuery Ajax 调用运行错误,但 firebug 显示 200 ok 并返回 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22218646/