2010-01-20 74 views
0

我想从jquery ajax函数中为JavaScript中的全局变量赋值。将值赋给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

+1

你需要什么trueFalse for?很高兴知道,因为你可能以错误的方式做到这一点。 – kjagiello 2010-01-20 14:28:49

+0

onSubmit =“return validate()” if(true False == true) then submit else exists exists in same page。 – 2010-01-20 14:37:24

回答

3

如果你真的不能改变应用程序逻辑,那么你必须创建一个“同步” Ajax请求(通过设置async:false$.ajax选项),然后它会等待,直到“GET”已经执行,然后才将值返回给调用者。

否则,您应该重写代码,以便成功函数调用回一些回调函数,它现在可以继续执行任何操作。

+0

我尝试了异步:false,但是页面也提交了。 – 2010-01-20 14:37:55

+0

我还没有看到调用此代码的代码,所以我无法发表评论。你是否在表单提交时调用这个? – naivists 2010-01-20 14:45:33

+0

是的,我从onsubmit调用了代码。现在一切正常。谢谢。 – 2010-01-21 10:20:10

4

您的代码将无法工作,因为行return trueFalse;在成功函数运行之前执行,因为它被称为异步(如Ajax中的A)HTTP请求的结果。你会需要一个回调函数传递给这个代码,并调用,在成功的功能:

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

+0

+1优雅。我认为调用方法的第一个参数是'this'的范围。 'callback.call(null,msg || false)' – czarchaic 2010-01-20 14:46:30

+0

@czarchaic你是对的,修正它使用'this'作用域从调用方法(我认为...) – roryf 2010-01-20 14:49:55

0

既然你是这样做form.onsubmit,你不能做一个异步请求。浏览器不会知道它应该等到异步请求完成。使用异步的好处是它不会锁定你的脚本/浏览器,但在这种情况下,这实际上就是你想要的。