升级到v1.5时出现Jquery ajax错误
我从v1.4.4升级到v1.5。 我想我发现了下面的问题
$(document).ready(function(){ // Get token on page load. update_csrf_token();
function看起来像这样…… 编辑
function update_csrf_token() { $.ajax({ type: "GET", url: "", dataType: "json", jsonp: false, jsonpCallback: "callbackName", success: function(data) { csrf_token = data.csrf_token; return data.csrf_token; } }); }
我在firebug中查找了ajax请求,它似乎在url的末尾添加了?_ = 1297353567948 ,这使得csrf令牌无法生成。 我如何摆脱这一点,还是1.5新手,我什么也做不了? 谢谢
jQuery 1.5会自动添加一个随机回调参数,但你可以通过设置jsonp
和jsonpCallback
jQuery ajax设置来覆盖它。
来自jQuery Ajax API :
从jQuery 1.5开始,将jsonp选项设置为false可防止jQuery将“?callback”字符串添加到URL或尝试使用“=?” 转型。 在这种情况下,您还应该显式设置jsonpCallback设置。 例如,
{ jsonp: false, jsonpCallback: "callbackName" }
。
下划线参数( ?_=...
)是一个包含更改时间戳的参数,从而使请求URL始终显示为浏览器以前从未见过的内容并强制实际的HTTP请求。 可以通过向.ajax()
调用添加cache: true
设置来启用缓存来删除该参数(或通过全局设置: jQuery.ajaxSetup({cache:true});
.ajax()
使用dataTypes script
和jsonp
,设置默认为true
。
请validation您的代码和插件(例如,使用$ .ajaxSettings作为默认选项的旧validation插件。删除如下所示的代码:
var settings = $.extend( {}, $.ajaxSettings, settings );
如果您不能或不想这样做,请尝试添加:
{ jsonp: null, jsonpCallback: null }
到你的设置。 所以你的代码应该是:
$.ajax({ type: "GET", url: "", dataType: "json", jsonp: null, jsonpCallback: null, success: function(data) { csrf_token = data.csrf_token; return data.csrf_token; } });
或者您可以使用$ ajaxSetup()来设置默认设置以防止jsonp回调:
$ajaxSetup({ jsonp: null, jsonpCallback: null });
有关详细信息,请参阅票号#8084 。
注意:官方jQuery插件中心validation插件的文档 – http://plugins.jquery.com/project/validate已经过时(这真的让我感到烦恼)。 它仅涵盖validation插件的1.5.5版本。 确保参考主页: jQuery插件:validation最新版本。
在AJAX中设置cache:false
(不要忘记逗号),该参数将停止追加。 如果它与jsonp相关,你会看到添加的内容如下:
回调= jQuery171003826577159490807_1332979269727
但是?_ = 看起来像时间戳是jQuery试图阻止任何客户端缓存请求的标志。
我遇到了同样的问题,经过太多的谷歌搜索,我最终得到的是因为jquery.validate.min.js,强制jsonp调用。
新版本的JQuery Validation 1.8没有更多问题
http://bassistance.de/jquery-plugins/jquery-plugin-validation/