2011-09-12 3 views
9

У меня есть простая страница регистрации, которая проверяет, уже сделан ли пользователь.AjaxSetup никогда не выполняет функцию успеха

Я использую ajaxSetup для всех своих вызовов ajax, и по какой-то причине «успех» никогда не называется. Когда я смотрю на свою консоль (firebug), я вижу успешный запрос (код 200 OK, и в результате я получаю true или false).

Вот мой код:

$('#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

, потому что вы уже используете success в вашем $.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'); 
    } 
}); 

все в $.ajax перекроет $.ajaxSetup.

5

Удалите обработчик success внутри $.ajax().

2

Я думаю, что вы переопределяете его, когда указываете функцию успеха в своем вызове ajax. Попробуйте удалить это и посмотреть, вызывает ли он один из ajaxSetup.

2

$.ajaxSetup() - это средство для предопределенных настроек по умолчанию, которые применяются ко всем вашим будущим звонкам ajax(), если вы не переопределите их в этом конкретном вызове ajax(). Когда вы определяете обработчик успеха как в вызове ajaxSetup(), так и в самом вызове ajax(), будет вызван только один из этих обработчиков.

Итак, если вы хотите, чтобы обработчик успеваемости получил вызов от 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); 
Смежные вопросы