jquery - AJAX 添加到 URL 字符串

标签 jquery json ajax jsonp

我正在使用 JSONP 进行 AJAX 调用,该调用失败且没有报告原因。我们正在观察被调用的服务器上发生的情况,并看到 AJAX 正在添加到 URL,这可能会增加我们的问题。

返回的数据应该是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);
    }

});

当查看被调用的服务器时,我们看到 URL 现在是“http://foo:8080/playlist?._=1449088167560 ”。

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

想法?

史蒂夫

最佳答案

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

cache (default: true, false for dataType 'script' and 'jsonp') Type: Boolean If set to false, it will force requested pages not to be cached by the browser. Note: Setting cache to false will only work correctly with HEAD and GET requests. It works by appending "_={timestamp}" to the GET parameters. The parameter is not needed for other types of requests, except in IE8 when a POST is made to a URL that has already been requested by a GET.

因为您使用的是 jsonp,jQuery 会自动附加此参数,以防止 Web 结果被缓存,这通常发生在 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 。我不确定这是否是您将其粘贴到问题中时的拼写错误,但它肯定可能导致您的错误。通常,除非服务器专门查找键为 _ 的参数,否则 url 中包含额外参数应该没有什么区别。然而,对于 .,我认为从技术上讲这是一个无效的 URI 字符串。

关于jquery - AJAX 添加到 URL 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34052638/

相关文章:

javascript - onblur ajax不调用回调函数

javascript - 如何使用 jquery 清除单个验证消息

javascript - jQuery 改变 div 位置 onMouseOver

json - 将 Json-in-TEXT 列转换为真正的 JSONB 列

javascript - 成功后如何返回几条数据?

jquery - href 与脚本化页面转换和按钮突出显示

mysql - 对象数组上 JSON 字段的 Where 子句

javascript - 在 javascript for 循环中查询多个 JSON 表

javascript - spring mvc 3 + jquery + AJAX + $.get - 值未从 Controller 返回到回调方法

jquery - ruby on rails ajax错误处理