Javascript变量范围问题

时间:2009-02-23 13:08:15

标签: javascript

如果我有这样的功能:

function validateSomething()
{
  var valid;
  $.post("something.php", {x:y},
  function(data)
  {
     if (isSomething(data))
       valid=true; 
       //Here referring to the valid variable 
       //set outside this function, in the
       // parent function
     else
       valid=false; 
  });
  return valid/
}

是否可以在Ajax请求完成后调用的子函数中设置valid?如果没有,我如何根据ajax请求的结果从父函数返回true / false?

3 个答案:

答案 0 :(得分:2)

  

如果没有,我如何根据ajax请求的结果从父函数返回true / false?

你不能;这不是Asynchrony的工作方式。

AJAX调用甚至可能永远不会返回!

父函数应触发验证请求,然后假设它无效(例如,通过禁用提交按钮)或显示“我在想”反馈(旋转指示符)。

然后AJAX返回处理功能将清除这些部分(通过启用按钮或将指示器更改为绿色复选标记或红色X)。如果AJAX调用永远不会通过 - 它将保持无效。如果它确实通过,那就是清理发生的时候。

答案 1 :(得分:1)

有效会更新,是的。但是:AJAX-Call是异步的,即。在父函数返回后,您的函数肯定会被调用。没有办法等待异步过程完成。

答案 2 :(得分:0)

虽然你可以从内部函数设置变量,但是一旦post以异步方式完成后调用内部函数,它将不会及时设置返回。根据您尝试执行的操作,您可以通过使回调函数简单地调用将根据返回值发生的操作来处理它。例如,如果您在帖子成功时单击要获取的链接,则从validateSomething函数返回false,然后成功发布从链接中获取href并使用其值设置location.href来模拟效果被点击的链接(不重新运行验证功能)。