5

我刚刚从JQ UI 1.8.23 切换到 1.10。至于此版本,ajaxOptions已弃用,现在ui.ajaxSettings改为使用。

这就是我的代码的样子:

$( "#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 发送它 - 没有办法解决它。

谢谢你的帮助

4

3 回答 3

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*
        });
    }
});
于 2013-01-23T13:39:32.963 回答
2

我有同样的问题。我已经对此进行了测试:

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

但它是一个GET类型而不是一个POST.

我试过了 :

ui.ajaxSettings.format = 'html';

但它在帖子中没有任何变量。

所以我试过:

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

帖子中不再有变量。

于 2013-02-19T10:35:28.437 回答
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!');
            });
        }
    });

Also, pay attention what jqXHR methods you are overwriting, latest Jquery UI (ver. 1.11.4) does not use depreciated methods anymore.

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

于 2015-08-19T17:02:42.850 回答