我有一组jQuery Ajax选项卡需要使用动态参数打开,该参数在全局Javascript变量中定义。
到目前为止,我有这个:
function getVariable() {
return globalVar;
}
$(document).ready(function(){
$("#tabs").tabs({
ajaxOptions: {
data: {dynamicParameter: getVariable()}
}
});
});
<div id="tabs">
<ul>
<li><a href="firstTab.html" title="first">First</a></li>
<li><a href="secondTab.html" title="second">Second</a></li>
</ul>
</div>
当我点击每个标签时,请求生成为“firstTab.html?dynamicParameter = someValue”。
问题是,当globalVar值发生变化时,我的请求没有,它们与初始加载完全相同。有没有办法让他们反映变量的变化?
答案 0 :(得分:2)
问题是ajaxOptions是在选项卡的init上设置的。你应该做这样的事情来覆盖数据属性。
您可以使用select
回调覆盖ajaxOptions
(尚未测试过)
$("#tabs").tabs({
select: function() {
$(this).tabs("option", { ajaxOptions: { data: { dynamicParameter: getVariable() } } });
},
ajaxOptions: {
data: {dynamicParameter: getVariable()}
}
});
答案 1 :(得分:1)
删除括号&#39;()&#39;
{dynamicParameter: getVariable()}
到
{dynamicParameter: getVariable}
这样你就会传递函数,而不是值。 当它被调用时,它将要求新值。
答案 2 :(得分:0)
仅供参考,上面的答案中提供的代码曾经在1.9中为我工作,但在升级到jquery 1.10之后我发现它不再起作用了。我还在jquery网站上发现了一个帖子,解释了变化以及实现这一目标的新方法;所以,我以为我会分享
OLD WAY:
$( "#tabs" ).tabs({
ajaxOptions: {
username: "foo",
password: "bar"
}
});
新方式:
$( "#tabs" ).tabs({
beforeLoad: function( event, ui ) {
ui.ajaxSettings.username = "foo";
ui.ajaxSettings.password = "bar";
}
});
这可能不再适用;但后来我发现了第二个链接。这似乎意味着传递数据的唯一方法现在是使用ui.ajaxSettings.url
属性的beforeSend方法。这当然限制了您获取请求。我希望他们独自留下这个功能。