AJAX添加到URL字符串

时间:2015-12-02 20:45:30

标签: jquery json ajax jsonp

我正在使用JSONP进行AJAX调用,但由于没有报告原因而失败。我们正在观察正在调用的服务器上发生了什么,并看到AJAX正在添加到URL,这可能会增加我们的问题。

返回的数据应该是JSON。当从浏览器调用URL时,它会按预期返回,当从调用下面代码的页面返回时,返回错误“Undefined”,表明没有报告错误。

$.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 个答案:

答案 0 :(得分:1)

_=1449088167560来自jQuery,因为您将datatype指定为jsonp。有关详细信息,请参阅此处的jQuery.ajax文档。具体来看cache参数说明:

  

缓存(默认:true, false for dataType 'script' and 'jsonp')   类型:布尔值   如果设置为false,它将强制浏览器不缓存请求的页面。注意:将缓存设置为false只能与HEAD和GET请求一起正常工作。它的工作原理是附加" _ = {timestamp}"到GET参数。其他类型的请求不需要该参数,但在IE8中,当对已经由GET请求的URL进行POST时,该参数除外。

因为您正在使用jsonp,所以jQuery会自动附加此参数,以防止通过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请求的默认值,应防止附加额外参数。

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