在javascript中为全局变量赋值
我想从jQueryAjax函数为javascript中的全局变量赋值在javascript中为全局变量赋值,javascript,jquery,Javascript,Jquery,我想从jQueryAjax函数为javascript中的全局变量赋值 var trueFalse; $.ajax({ type: "GEt", url: "url", data: "text=" + $("#text").val(), success: function(msg) { if(msg.match(/OK/) != null) { trueFalse = "true"; } else { trueFa
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;
这里我需要来自success函数的trueFalse值
谢谢
v、 srinath如果您确实无法更改应用程序逻辑,那么您必须创建一个“同步”ajax请求(通过在
$.ajax
选项中设置async:false
),然后它将等待“GET”执行完毕,然后才将值返回给调用方
否则,您应该重写代码,使success函数回调到某个回调函数中,它现在可以继续执行任何必须执行的操作。您的代码将无法工作,因为行
返回trueFalse
在success函数运行之前执行,因为它是作为异步(如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;
});
您可能还需要查看,因为您是在form.onsubmit上执行此操作的,所以无法执行异步请求。浏览器不会知道它应该等到异步请求完成。使用async的好处是它不会锁定脚本/浏览器,但在这种情况下,这正是您想要的。您需要trueFalse做什么?知道这一点很好,因为您可能会以错误的方式执行。onSubmit=“return validate()”如果(trueFalse==true),那么提交else存在于同一页面中。我还没有看到调用此代码的代码,因此无法进行注释。你在表单提交中调用这个吗?是的,我从onsubmit调用了代码。现在一切正常。谢谢你的优雅。我认为call方法的第一个参数是this的范围
callback.call(null,msg | | false)
@czarchic您是对的,已修复,因此它使用调用方法中的this
作用域(我认为…)