【问题标题】:assign value to global variable in javascript在javascript中为全局变量赋值
【发布时间】:2010-01-20 14:26:35
【问题描述】:

我想通过 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

【问题讨论】:

  • 你需要 trueFalse 做什么?很高兴知道这一点,因为您可能会以错误的方式这样做。
  • onSubmit="return validate()" if(trueFalse == true) 然后提交 else 存在于同一页面中。

标签: javascript jquery


【解决方案1】:

您的代码将无法工作,因为 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

【讨论】:

  • +1 表示优雅。我认为 call 方法的第一个参数是this 的范围。 callback.call(null, msg||false)
  • @czarchaic 你是对的,已修复,因此它使用调用方法中的this 范围(我认为......)
【解决方案2】:

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

否则,您应该重写代码,以便成功函数回调到某个回调函数,它现在可以继续执行任何必须完成的操作。

【讨论】:

  • 我没有看到调用这个代码的代码,所以无法评论。你是在表单提交上调用这个吗?
  • 是的,我从 onsubmit 中调用了代码。现在一切正常。谢谢。
【解决方案3】:

由于您在 form.onsubmit 上执行此操作,因此您无法执行异步请求。浏览器不会知道它应该等到异步请求完成。使用异步的好处是它不会锁定您的脚本/浏览器,但在这种情况下,这实际上是您想要的。

【讨论】:

    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多