2011-11-11 15 views
0

我有一套jQuery Ajax選項卡,需要使用全局Javascript變量中定義的動態參數打開。jQuery Ajaxt標籤url中的動態參數?

到目前爲止,我有這樣的:

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值發生變化,我的請求沒有發生變化,它們與初始負載保持完全一樣。有沒有辦法讓他們反映我變量的變化?

回答

2

問題是,ajaxOptions在選項卡的init中設置。你應該這樣做來覆蓋數據特性。

可以使用select回調在此改變ajaxOptions

(沒有測試)

$("#tabs").tabs({ 
    select: function() { 
     $(this).tabs("option", { ajaxOptions: { data: { dynamicParameter: getVariable() } } }); 
    }, 
    ajaxOptions: { 
     data: {dynamicParameter: getVariable()} 
    } 
}); 
+0

我剛剛發佈了這個問題後得到了這個:) 有沒有一種方法可以序列化表單中的數據並同時添加一個參數? – eagerMoose

+0

當然可以。 'var data = $('form')。serializeArray(); data.push({name:'varName',value:'varValue'});' –

+0

太好了,謝謝!有沒有簡單的方法來更新數組中現有元素的值? – eagerMoose

0

僅供參考,以上爲我所用的1.9上班的答案提供的代碼,但升級到jQuery 1.10後,我發現它不再有效。我還在jquery網站上發現了一篇文章,解釋了這一變化以及實現這一目標的新方法;所以,我想我會分享

老方法:

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

NEW WAY:

$("#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

1

刪除括號,

{dynamicParameter: getVariable()} 

{dynamicParameter: getVariable} 

這樣你會傳遞給函數,而不是價值。 當它被調用時它會要求新的值。