当浏览器和 CURL 工作时,ajax GET 请求的 URL 超时



我看到一个类似的问题,但它没有被接受的答案。

以下 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 - 请求的资源上不存在"访问控制允许来源"标头

最新更新