我看到一个类似的问题,但它没有被接受的答案。
以下 ajax 请求超时。但是GET
使用浏览器或curl
在同一URL上请求可以正常工作。请注意,这是一个cross domain AJAX
,因为代码位于不同的服务器上,并且URL用于AWS EC2(elastbeanstalk)实例。
有什么线索吗?
$.ajax({
url: "http://<edited>.elasticbeanstalk.com/api/v1/Location",
dataType:'jsonp',
crossDomain:true,
timeout:120000
}).done(function(){
//do something
$("#status").html("SUCESS");
}).fail(function(jqXHR, textStatus){
if(textStatus == 'timeout')
{
//alert('Failed from timeout');
$("#status").html(textStatus);
//do something. Try again perhaps?
}
});
[编辑] 已添加
当我检查 AWS 服务器日志时,我看到 GET 请求的响应为 200(成功)。但仍然 $.ajax 请求超时
120.138.116.202 - - [17/Jun/2015:12:12:31 +0000] "GET/api/v1/Location HTTP/1.1" 200 144 "http://yyyy.xxxx.com/" "Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36"
您无法处理跨域JSONP
请求的错误。
您必须使用Github上可用的jsonp plug-in
https://github.com/jaubourg/jquery-jsonp 它为您提供了错误处理的支持,并尝试找出到底出了什么问题
您可以浏览他们的文档,这既简单又容易
浏览 jQuery 文档。你会注意到
错误
请求失败时要调用的函数 (...)注意:此处理程序 不会为跨域脚本和跨域 JSONP 请求调用。 这是一个阿贾克斯事件。
[解决方案]
事实证明,该问题与跨域请求有关。根据以下链接更新服务器代码以添加"访问控制-允许源"标头解决了问题
Javascript - 请求的资源上不存在"访问控制允许来源"标头