2011-09-12 21 views
9

ユーザーが既に取得されているかどうかを確認する簡単な登録ページがあります。AjaxSetupは決して成功関数を実行しません。

私はすべての私のAJAX呼び出しのためにと、「成功」と呼ばれることはありません何らかの理由でajaxSetupを使用しています。私は自分のコンソール(firebug)を見ると、正常にリクエストを受け取ることができます(コード200 OK、結果として真または偽になります)。

は、ここに私のコードです:私のコードが間違っている

$('#checkValidUsername').click(function() { 
    // some basic validation like not empty etc... 
    $.ajax({ 
     type: "POST", 
     url: '/checkuser.php', 
     cache: false, 
     data: $("#form").serialize(), 
     dataType: 'json', 
     success: function(result) { 
      // do some actions 
     }, 
    }); 
} 

$.ajaxSetup({ 
    beforeSend: function() { 
     // show loading dialog // works 
    }, 
    complete: function(xhr, stat) { 
     // hide dialog // works 
    } 
    success: function(result,status,xhr) { 
     // not showing the alert 
     alert('success'); 
    } 
}); 

何? ありがとう

+5

すでに投稿されている回答にいくつかの説明を追加するだけで、ajaxSetupメソッドはデフォルトを設定します。成功したメソッドを個々のAjaxリクエストに渡すと、そのメソッドはデフォルトをオーバーライドします。 –

答えて

22

すでに$.ajax

$('#checkValidUsername').click(function() { 
    // some basic validation like not empty etc... 
    $.ajax({ 
     type: "POST", 
     url: '/checkuser.php', 
     cache: false, 
     data: $("#form").serialize(), 
     dataType: 'json' 
/* 
     success: function(result) { 
      // do some actions 
     }, 
*/ 
    }); 
} 

$.ajaxSetup({ 
    beforeSend: function() { 
     // show loading dialog // works 
    }, 
    complete: function(xhr, stat) { 
     // hide dialog // works 
    } 
    success: function(result,status,xhr) { 
     // not showing the alert 
     alert('success'); 
    } 
}); 

すべてが$.ajaxSetupを上書きしますあなたの$.ajax呼び出しでsuccessを使用しているため。

5

successハンドブックを$.ajax()の中に削除します。

2

あなたはあなたのajax呼び出しで成功関数を指定するときにオーバーライドしていると思います。それを削除して、ajaxSetupからそれを呼び出すかどうかを確認してください。

2

$.ajaxSetup()は、その特定のajax()コールで上書きしない限り、将来のすべてのajax()コールに適用される既成のデフォルト設定を提供する手段です。 ajaxSetup()呼び出しとajax()呼び出しの両方で成功ハンドラを定義すると、その成功ハンドラの1つだけが呼び出されます。

したがって、成功ハンドラをajaxSetup()から呼び出すには、ajax()コールでハンドラを定義しないでください。 ajax()コールで定義した場合、ajaxSetup()からのコールは呼び出されません。

2
$('#checkValidUsername').click(function() { 
    // some basic validation like not empty etc... 
    $.ajax({ 
     type: "POST", 
     url: '/checkuser.php', 
     cache: false, 
     data: $("#form").serialize(), 
     dataType: 'json', 
     success: function(result) { 
      myAjaxSetup.success.apply(this, arguments); 
      // do some actions 
     }, 
    }); 
} 

var myAjaxSetup = { 
    beforeSend: function() { 
     // show loading dialog // works 
    }, 
    complete: function(xhr, stat) { 
     // hide dialog // works 
    } 
    success: function(result,status,xhr) { 
     // not showing the alert 
     alert('success'); 
    } 
}; 
$.ajaxSetup(myAjaxSetup); 

あなたは

myAjaxSetup.success.apply(this, arguments); 

または

myAjaxSetup.error.apply(this, arguments); 

または

myAjaxSetup.anyfunctionyouwant.apply(this, arguments); 
1
あなたが使用すること

Global Ajax Event Handlers

単に上書きされ、各オブジェクトの機能
$(document).ajaxSuccess(function() { 
    $(".log").text("Triggered ajaxSuccess handler."); 
}); 
関連する問題