0
$(this).find(':submit').attr('disabled',true);
        $.ajax(
        {
            url:'/enviarSugerenciaMessageBoard',
            cache: false,
            type: 'POST',
            data: $(this).serialize(),
            success: function(success)
            {
                if(success=='Envio correcto')
                {
                    console.log('Envio correcto');
                    $(this).find(':submit').attr('disabled',false);
                }else{
                    console.log('Error en el envio');
                    $(this).find(':submit').attr('disabled',false);
                }
            }
        });

このajaxクエリは正常に機能します。問題は、サーバーから「Enviocorrecto」を取得した場合です。コンソールではEnviocorrectoを取得しますが、attrが無効になっているとfalseが機能しません。

追加や追加など、成功時に他の関数を作成しようとしましたが、機能しませんでした

async:falseでも

4

2 に答える 2

2

thisキーワードは成功関数でその要素に属していないためです。この変数は、使用できるよりも別の変数にバックアップする必要があります。

このような、

$(this).find(':submit').attr('disabled',true);
var self = this;
        $.ajax(
        {
            url:'/enviarSugerenciaMessageBoard',
            cache: false,
            type: 'POST',
            data: $(this).serialize(),
            success: function(success)
            {
                if(success=='Envio correcto')
                {
                    console.log('Envio correcto');
                    $(self).find(':submit').attr('disabled',false);
                }else{
                    console.log('Error en el envio');
                    $(self).find(':submit').attr('disabled',false);
                }
            }
        });
于 2013-03-27T02:34:04.107 に答える
2

successコールバックの内部はthis、あなたが呼び出した場所からのものではありません.ajax()thisコールバック内の値を制御するには、次のcontextオプションを使用できます。.ajax()

あなたの場合、あなたがする必要があるのは:

$.ajax({
    context: this, // what you wnat `this` to be inside success
    url:'/enviarSugerenciaMessageBoard',
    ...
    success: function(success) {
        // 'this' is what you passed in via context
    });

ドキュメント:http ://api.jquery.com/jQuery.ajax/-下にスクロールしてcontextオプションを表示します

于 2013-03-27T02:41:26.617 に答える