2013-01-23 53 views
5

我剛剛從JQ UI 1.8.23切換到1.10。至於這個版本,ajaxOptions被棄用,現在用ui.ajaxSettings來代替。發佈數據JQuery UI選項卡1.10

這是我的代碼怎麼看起來像:

$("#tabs").tabs({ 
     ajaxOptions: { 
      type : 'POST', 
      data : 'format=html', 
      error: function(xhr, status, index, anchor) { 
       $(anchor.hash).html(
        "Couldn't load this tab. We'll try to fix this as soon as possible. " + 
        "If this wouldn't be a demo. "); 
      }, 
      success: function() { 
       *Something in here* 
      } 
     } 
    }); 

一切工作就好了。現在,新的代碼:

$("#tabs").tabs({ 
     beforeLoad: function(event, ui) { 
      ui.ajaxSettings.type = 'POST'; 
      ui.ajaxSettings.data = 'format=html'; 
      ui.jqXHR.error(function() { 
       ui.panel.html(
       "Couldn't load this tab. We'll try to fix this as soon as possible. " + 
       "If this wouldn't be a demo."); 
       }); 
      ui.jqXHR.success(function(){ 
*something in here* 
       }); 
     } 
    }); 

所以我需要張貼此數據format=html到我的服務器,但隨着新版本發送到服務器,我的帖子變量是空的。什麼都不會發送到服務器。另外,如果我想在我的php script中獲得POST變量,則該數組爲空。我正在使用ZEND順便說一句。我需要通過POST發送它 - 這是無法解決的。

感謝您的幫助

+1

你解決了嗎?我已經搜查過,似乎沒有解決辦法。看起來像UI-Tabs設計有一個重要特徵 - 添加後期數據的能力 - 遺漏了! – user1055761

+1

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

回答

3

如果你看看源jQuery.ajax,上線486,你會看到它的數據添加到URL。然後在532行調用beforeSend方法,這是在jQuery UI選項卡中觸發beforeLoad事件的原因。

因此,所有你需要做的就是修改URL,而不是數據:

$("#tabs").tabs({ 
    beforeLoad: function(event, ui) { 
     ui.ajaxSettings.type = 'POST'; 
     ui.ajaxSettings.url += (/\?/.test(ui.ajaxSettings.url) ? "&" : "?") + 'format=html'; 
     ui.jqXHR.error(function() { 
      ui.panel.html(
       "Couldn't load this tab. We'll try to fix this as soon as possible. " + 
       "If this wouldn't be a demo."); 
     }); 
     ui.jqXHR.success(function(){ 
      *something in here* 
     }); 
    } 
}); 
2

我有同樣的問題。 我已經測試了這一點:

ui.ajaxSettings.url += (/\?/.test(ui.ajaxSettings.url) ? "&" : "?") + 'format=html'; 

但它是一個GET型不是POST

我曾嘗試:

ui.ajaxSettings.format = 'html'; 

但在後wasnt任何變量。

所以我曾嘗試:

ui.ajaxSettings.data = { format:'html' }; 

沒有變再在後。

+0

數據將需要在beforeLoad之前進行處理。從API文檔: 注意:雖然提供了ui.ajaxSettings並且可以進行修改,但其中一些設置已由jQuery處理。例如,預過濾器已經被應用,***數據已經被處理,並且類型已經被確定***。 beforeLoad事件同時發生,因此與jQuery.ajax()的beforeSend回調具有相同的限制。 –

1

謝謝Christian Seifert張貼問題和PetersenDidIt爲好的答案!這裏是我的ajax執行相同的問題,希望這段代碼片段將幫助那裏的人!

$("#tabs").tabs({ 
     beforeLoad: function(event, ui) { 
      var url = window.location.protocol + "//" + window.location.hostname + "/ajax"; 
      var data = {name: "job", value: "Rock Star"}; 

      ui.ajaxSettings.type = 'GET'; 
      ui.ajaxSettings.url = url + "?" + $.param(data, false); 

      //console.log(ui.ajaxSettings.url); 
      ui.jqXHR.fail(function() { 
       ui.panel.html('Couldn't load this tab!'); 
      }); 
     } 
    }); 

另外,要注意什麼jqXHR方法要覆蓋,最新的jQuery用戶界面(版本1.11.4)不使用折舊方法了。

https://github.com/scottgonzalez/jquery-ui/commit/e3f94a87dc312c2225e9ebe7231d868820bd6150