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!');
            });
        }
    });

また、上書きしている jqXHR メソッドに注意してください。最新の Jquery UI (ver. 1.11.4) は、廃止されたメソッドを使用しなくなりました。

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

于 2015-08-19T17:02:42.850 に答える