2013-01-23 55 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