2015-12-02 117 views
2

我正在使用JSONP进行AJAX调用,该调用失败并且没有报告的原因。我们正在监视正在调用的服务器上正在发生的事情,并看到AJAX正在添加到URL中,这可能会增加我们的问题。AJAX添加到网址字符串

返回的数据应该是JSON。从浏览器调用URL时,如果从调用以下代码的页面返回,则返回“未定义”错误,表示没有错误报告。

$.ajax({ 

    url: 'http://foo:8080/playlist', 
    type: 'GET', 
    crossDomain: true, 
    dataType: 'jsonp', 
    jsonp : false, 
    success: function(data){ 

     //Writes return data to UI 
     writeToUI(text.html(JSON.stringify(data))); 

    }, 
    error: function(e){ 

     alert(e.message); 
    } 

}); 

在观看被称为服务器,我们看到现在的网址为“http://foo:8080/playlist?._=1449088167560”。

我们认为URL上的额外信息可能会导致API在服务器上失败,但是想要查看这是从哪里来的,以及是否有办法将其关闭?

想法?

史蒂夫

回答

1

_=1449088167560从jQuery的,因为您所指定的datatypejsonp到来。有关更多信息,请参阅jQuery.ajax文档。具体看cache参数说明:

缓存(默认:true, false for dataType 'script' and 'jsonp') 类型:Boolean 如果设置为false,这将迫使请求的页面不被浏览器缓存。注意:将缓存设置为false只能在HEAD和GET请求中正常工作。它通过在GET参数中附加“_ = {timestamp}”来工作。其他类型的请求不需要该参数,除了在IE8中对POST已经请求的URL进行POST时以外。

因为你使用jQuery的jsonp自动追加此参数以防止缓存,通常出现在GET请求的网页结果。这就是_=1449088167560的来源。我从来没有在jQuery内部查看过这段代码,但我相信它从时间戳(可能是UNIX时间戳值)生成了这个数字。

至于修复此,我想你可以试试cache参数专门设置true像这样:

$.ajax({ 
    url: 'http://foo:8080/playlist', 
    type: 'GET', 
    crossDomain: true, 
    dataType: 'jsonp', 
    jsonp : false, 
    cache: true, 
    success: function(data){ 
     //Writes return data to UI 
     writeToUI(text.html(JSON.stringify(data))); 
    }, 
    error: function(e) { 
     alert(e.message); 
    } 
}); 

这是正常的GET请求的默认,并应防止额外的参数被追加。

另一件要检查的值是隐藏在您的url中的?_值之间的明显.值:http://foo:8080/playlist?._=1449088167560。我不确定这是否是您在问题中粘贴的错误,但肯定会导致您的错误。通常情况下,除非服务器正在专门查找关键字是_的参数,否则在url中使用额外的参数应该没有区别。然而,使用.,我认为这在技术上是一个无效的URI字符串。

+0

谢谢。 '''是我的一个错误。好的发现。 我试图添加“缓存:真”,它仍然没有返回。不知道这个问题是什么。 有没有一个JSFiddle类型的地方,我可以测试AJAX调用?也许如果有一个工作的网址来测试,以确保它不是我们的电话? – SteveV