在javascript中为全局变量赋值

时间:2010-01-20 14:26:36

标签: javascript jquery

我想从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

3 个答案:

答案 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上执行此操作,因此无法执行异步请求。浏览器不会知道它应该等到异步请求完成。使用异步的好处是它不会锁定你的脚本/浏览器,但在这种情况下,这实际上就是你想要的。