我想从jquery ajax函数中为javascript中的全局变量赋值。
var trueFalse;
$.ajax({
type: "GEt",
url: "url",
data: "text=" + $("#text").val(),
success: function(msg) {
if(msg.match(/OK/) != null) {
trueFalse = "true";
}
else {
trueFalse = "false";
}
}
});
return trueFalse;
这里我需要成功函数的trueFalse值。
感谢 v.srinath
答案 0 :(得分:4)
您的代码将无效,因为行return trueFalse;
在成功函数运行之前执行,因为它是作为异步(如在Ajax中的A中)HTTP请求的结果而调用的。您需要将回调函数传递给此代码,并在success函数中调用它:
function getWithCallback(val, callback) {
var scope = this;
$.ajax({
type: "GET",
url: "url",
data: "text=" + val,
success: function(msg) {
callback.call(scope, msg.match(/OK/) || false);
}
});
}
getWithCallback($("#text").val(), function(result) {
if (result) {
// Do something
}
});
您可以尝试在提交时验证表单:
var validating = false;
var valid = false;
$('#myform').submit(function(event) {
if (validating) {
return false;
}
if (valid) {
return true;
}
var form = this;
validating = true;
getWithCallback($('#text').val(), function(result) {
if (result) {
valid = true;
form.submit();
}
validating = false;
});
return false;
});
您可能还想查看jQuery Validation plugin
答案 1 :(得分:3)
如果你真的无法改变应用程序逻辑,那么你必须创建一个“同步”ajax请求(通过在async:false
选项中设置$.ajax
),然后它将等到“GET” “已执行,然后才将值返回给调用者。
否则,你应该重写代码,以便成功函数回调一些回调函数,它现在可以继续进行任何必须完成的工作。
答案 2 :(得分:0)
由于您是在form.onsubmit上执行此操作,因此无法执行异步请求。浏览器不会知道它应该等到异步请求完成。使用异步的好处是它不会锁定你的脚本/浏览器,但在这种情况下,这实际上就是你想要的。