Динамический параметр в jQuery URL вкладки Ajaxt? - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть набор вкладок 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 ]

2 голосов
/ 11 ноября 2011

проблема в том, что ajaxOptions установлены в начале вкладки.Вы должны сделать что-то подобное, чтобы переопределить свойства данных.

Вы можете использовать обратный вызов select, чтобы переопределить ajaxOptions

(не проверял это)

$("#tabs").tabs({
    select: function() {
        $(this).tabs("option", { ajaxOptions: { data: { dynamicParameter: getVariable() } } });
    },
    ajaxOptions: {
        data: {dynamicParameter: getVariable()}
    }
});
1 голос
/ 04 января 2017

Снять скобки '()'

{dynamicParameter: getVariable()}

до

{dynamicParameter: getVariable}

таким образом вы передадите функцию, а не значение. и когда он вызывается, он запросит новое значение.

0 голосов
/ 21 марта 2013

Кстати, код, указанный в ответе выше, работал для меня в 1.9, но после обновления до jquery 1.10 я обнаружил, что он больше не работает. Я также нашел пост на сайте jquery, объясняющий изменения и новый способ достижения этого; итак, я думал, что поделюсь

СТАРЫЙ ПУТЬ:

$( "#tabs" ).tabs({
    ajaxOptions: {
        username: "foo",
        password: "bar"
    }
});

НОВЫЙ ПУТЬ:

$( "#tabs" ).tabs({
    beforeLoad: function( event, ui ) {
        ui.ajaxSettings.username = "foo";
        ui.ajaxSettings.password = "bar";
    }
});

Возможно, это больше не работает ; Однако, как я позже нашел эту вторую ссылку. Что, по-видимому, подразумевает, что единственный способ передачи данных теперь находится в методе beforeSend с использованием свойства ui.ajaxSettings.url. Это, конечно, ограничивает вас в получении запросов. Хотелось бы, чтобы они оставили эту функцию в покое.

Вот ссылка на пост http://jqueryui.com/upgrade-guide/1.9/#deprecated-ajaxoptions-and-cache-options-added-beforeload-event

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

...