jQuery Ajax选项卡url中的动态参数?

时间:2011-11-11 09:50:57

标签: jquery jquery-ui jquery-ui-tabs

我有一组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值发生变化时,我的请求没有,它们与初始加载完全相同。有没有办法让他们反映变量的变化?

3 个答案:

答案 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方法。这当然限制了您获取请求。我希望他们独自留下这个功能。

以下是帖子http://jqueryui.com/upgrade-guide/1.9/#deprecated-ajaxoptions-and-cache-options-added-beforeload-event

的链接

http://bugs.jqueryui.com/ticket/8673