为什么我的jQuery AJAX函数总是返回false
Why does my jQuery AJAX function always return false?
function check_username(){
$.ajax({
type: "POST",
dataType: 'json',
url: "/ajax/check/username.html",
data: "via=ajax&username="+$('input[name=register_username]').val(),
success: function(msg){
if(msg.response==false){
register_username.parent().css('background-color','#db2e24');
register_username.parent().parent().find('td:last-child').text(msg.message);
register_username.focus();
return false;
} else {
register_username.parent().css('background-color','#fff');
register_username.parent().parent().find('td:last-child').text("");
return true;
}
}
});
}
如果我的英语不好,我很抱歉——英语不是我的母语。回到主题,为什么上面的函数总是返回false?仅供参考:JSON是OK
check_username
调用一个ajax函数,该函数启动一个网络操作,然后立即返回。check_username
早在ajax调用结束和成功处理程序被调用之前就返回了。因此,成功处理程序与check_username
返回的值无关。
由于check_username
函数本身没有返回值(仅在嵌入的成功处理程序函数中),check_username
返回undefined
,这是一个假值,因此您认为它总是返回false。
如果你想对成功处理程序的返回值做一些事情,那么你必须在成功处理程序本身中操作,或者你必须从成功处理程序中调用另一个函数。这就是异步操作的工作方式。
从成功处理函数返回true
或false
没有任何作用。成功处理程序由ajax处理代码的内部调用,从成功处理程序返回到ajax内部。没有以任何方式使用成功处理程序的返回值。
问题是逻辑条件msg.response==false..这总是求值为false,响应不是布尔值。您需要检查响应状态
如果我不得不猜测,您发布,并且返回的响应是一个JSON对象。但看起来你只是想看看你是否得到了一个有效的回应。为什么不试试这样:
试试这个:
function check_username()
{
$.ajax({
type: "POST",
dataType: 'json',
url: "/ajax/check/username.html",
data: "via=ajax&username="+$('input[name=register_username]').val(),
success: function( msg, textStatus )
{
if ( textStatus == "success" )
{
register_username.parent().css('background-color','#db2e24');
register_username.parent().parent().find('td:last-child').text(msg.message);
register_username.focus();
return false;
} else {
register_username.parent().css('background-color','#fff');
register_username.parent().parent().find('td:last-child').text("");
return true;
}
},
error: function( jqXHR, textStatus, errorThrown )
{
if ( textStatus == "parsererror" )
{
alert( "There is an error in your JSON object" );
}
}
});
}
您可能遇到的另一个问题是,您没有返回有效的json, jQuery将检查。添加一个错误将有助于揭示是否确实是这种情况。
实时演示http://jsfiddle.net/khalifah/4q3EJ/
相关文章:
- Array.every返回false,而不是类型error
- Javascript If else 只返回 TRUE 或只返回 FALSE
- 为什么当我在数组上测试regex时,它会返回false
- 检查文本区域是否为空总是返回false
- PHP strtotime()为JavaScript日期字符串返回false
- onsubmit返回false,但submit仍然执行
- 这个代码会返回false吗
- Ajax向表单返回false
- 表单验证JavaScript编号总是返回false
- 使用!而in运算符在应该为true时返回false,为什么
- jQuery.is(':checked')总是返回false
- Javascript 下划线每个总是返回 false
- 提交返回 false 总是在 jquery 中
- 为什么 1.2 == true 返回 false 如果布尔值 (1.2) 实际上是真的
- 如果循环中至少有一个元素返回 false,如何将变量设置为 false
- 基本JavaScript不断返回false
- 布尔对象上的逻辑 NOT 在 Javascript 中总是返回 false
- jquery focusin没有'调用.focus()并返回false;时无效;
- Ajax-执行成功前返回false
- jQuery JSON flickr提要返回false不工作