当变量"f"我为FALSE时,我想返回TRUE或FALSE。但是返回永远不会到达浏览器,表单会执行其默认操作。
如何让我的 ELSE 返回值?我试图硬编码一个返回值,而不是写"return myFunction()";这有效,但它对我没有帮助,因为我需要从"myFunction()"返回。
不要过多考虑代码应该做什么,它没有意义,它只是为了演示。
$('#theForm').submit(function()
{
var f = $('#theInput').val(); // input value
if(f == TRUE)
{
alert('Lorem ipsum');
return false;
}
else // If f is FALSE
{
$.post('/php/check.php',{check: f, function(data){myFunction(data);});
function myFunction(data)
{
if(data == 'false')
{
// Do something
return false;
}
else
{
// Do something
return true;
}
}
return myFunction();
}
});
我已经尝试过了,但它仍然没有从"返回 myFunction()"向表单返回值
$('#theForm').submit(function()
{
var f = $('#theInput').val(); // input value
if(f == true)
{
alert('Lorem ipsum');
return false; // Stop default form action
}
else // If f is FALSE
{
var request = $.ajax({
async: false,
url: "/php/checkArea.php",
type: "POST",
data: {data: f},
dataType: "text"
});
request.done(function(data) {
myFunction(data);
});
function myFunction(data)
{
if(data == 'false')
{
// Do something
return false; // Stop default form action
}
else
{
// Do something
return true; // YES PLEASE, do the default form action
}
}
return myFunction();
}
});
在您的帮助下,我终于找到了关于异步部分的解决方案。
$('#theForm').submit(function()
{
var f = $('#theInput').val(); // input value
if(f == true)
{
alert('Lorem ipsum');
return false; // Stop default form action
}
else // If f is FALSE
{
var request = $.ajax({
async: false,
url: "/php/checkArea.php",
type: "POST",
data: {data: f},
dataType: "text"
});
request.done(function(data) {
globalData = data; // Global variable
});
function myFunction(globalData)
{
if(globalData == 'false')
{
// Do something
return false; // Stop default form action
}
else
{
// Do something
return true; // YES PLEASE, do the default form action
}
}
return myFunction(globalData); // Call the function with the global variable
}
});
这非常有效:-)
这部分应该做你想要的:
if(f == TRUE)
{
alert('Lorem ipsum');
return false;
}
但是,这不应该:
$.post('/php/check.php',{check: f, function(data){myFunction(data);});
function myFunction(data)
{
if(data == 'false')
{
// Do something
return false;
}
else
{
// Do something
return true;
}
}
return myFunction();
当 Ajax 调用完成时,将调用 myFunction,但那时您已经从 .submit 块返回了!
您可以查看jQuery.ajax,它有一个使其同步的设置(async
设置为false
)。这可能会锁定浏览器在等待 Ajax 调用时无法执行任何其他操作,但这是进行同步调用的唯一方法。
创建一个DIV
,用于保存$.ajax
中的false
或true
值
<div id="result"></div>
现在构建你的JavaScript
$('#theForm').submit( function() {
var f = $('#theInput').val(); // input value
if(f == TRUE) {
alert('Lorem ipsum');
return false;
} else { // If f is FALSE
var rVal = $('div#result');
$.ajax({
type : 'POST',
data : f,
url : '/php/check.php',
context: rVal,
async : false,
success : function (msg) {
(msg == 'false') ? $(this).html('FALSE') : $(this).html(msg);
}
});
function myFunction(data) {
if(data == 'FALSE'){
// Do something
return false;
} else {
// Do something
return true;
}
}
return myFunction( rVal.html() );
}
区分
大小写可能是一个问题。Javascript使用true
和false
,而不是TRUE
和FALSE
。
在 else
子句中,您有一个POST
回调,用于处理返回的数据。但是,回调myFunction
将在代码达到return myFunction()
后运行,因为它没有参数,因此将导致匿名函数返回true
。
您需要使异步调用同步,但即便如此,myFunction
将其结果返回到何处?
您可以尝试强制myFunction
将其结果返回到正确的上下文,如下所示(我更喜欢在使用函数之前声明该函数),但您仍然可能会遇到同步性问题。从文档中可以看出,$.post
不能强制同步。
else // If f is FALSE
{
function myFunction(data)
{
if(data == 'false')
{
// Do something
return false;
}
else
{
// Do something
return true;
}
}
return ($.post('/php/check.php',{check: f}, function(data){myFunction(data);}));
}