当变量' f '我错误时,我想返回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();
}
});
我试过这个,但它仍然没有从'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) {
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
}
});
完美无缺: - )
答案 0 :(得分:2)
这部分应该做你想要的:
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();
$ .post将始终立即返回 。 Ajax调用完成后将调用myFunction,但到那时你已经从.submit块中返回了!
您可以查看jQuery.ajax,其设置可使其同步(将async
设置为false
)。这可能会阻止浏览器在等待Ajax调用时执行任何其他操作,但这是进行同步调用的唯一方法。
答案 1 :(得分:1)
创建一个DIV
,其中包含false
true
或$.ajax
值
<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() );
}
答案 2 :(得分:0)
区分大小写可能是个问题。 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);}));
}