当前位置: 首页 > 面试题库 >

JavaScript:Ajax请求后的全局变量

颜云瀚
2023-03-14
问题内容

这个问题非常简单和技术性:

var it_works = false;

$.post("some_file.php", '', function(data) {

     it_works = true;

});

alert(it_works); # false (yes, that 'alert' has to be here and not inside $.post itself)

我要实现的是:

alert(it_works); # true

有没有办法做到这一点?如果不是,可以$.post()返回一个值应用于it_works


问题答案:

您期望的是 同步阻塞 )类型的请求。

var it_works = false;

jQuery.ajax({
  type: "POST",
  url: 'some_file.php',
  success: function (data) {
    it_works = true;
  }, 
  async: false // <- this turns it into synchronous
});​

// Execution is BLOCKED until request finishes.

// it_works is available
alert(it_works);

默认情况下 ,请求是 异步的非阻塞 ),这意味着浏览器不会等待它们完成才能继续工作。这就是为什么您的警报得到错误结果的原因。

现在,jQuery.ajax您可以选择将请求设置为 sync
,这意味着脚本将仅在请求完成 继续运行。

建议的 方式,但是,是 重构 代码,以便数据将被传递到一个 回调
函数,一旦请求完成。这是优选的,因为阻止执行意味着阻止UI,这是不可接受的。这样做:

$.post("some_file.php", '', function(data) {
    iDependOnMyParameter(data);
});

function iDependOnMyParameter(param) {
    // You should do your work here that depends on the result of the request!
    alert(param)
}

// All code here should be INDEPENDENT of the result of your AJAX request
// ...

异步 编程稍微 复杂一些, 因为发出请求的结果被封装在一个函数中,而不是遵循请求语句。 但是用户体验
到的实时行为可能会 大大改善, 因为他们不会看到缓慢的服务器或缓慢的网络导致浏览器像崩溃一样运行。 同步 编程是 不礼貌的
不应 在人们 使用 的应用程序中使用。

道格拉斯·克罗克福德 ( YUI博客)



 类似资料:
  • 我只需要我测试对象获得新的数据,但是在异步函数中重写它之后,它仍然是旧的

  • 如果你要多于一个函数共用一个简单的变量,简单的处理方法就是把这个变量在所有函数中定义为global全局变量。在命令行做同样的事情,如果你要工作空间访问上述变量。这个全局变量的定义必须出现在变量被应用于一个函数之前。虽然不是要求,但全局变量也最好以大写字母开头,这样可以同其他变量区别出来。举个例子,做一个以falling.m命名的M-文件。 function h = falling(t) globa

  • ThinkCMF封装了前台模板开发时常用的一些变量,这些变量是全局的,你在前台模板任何时候都能直接调用: {$site_name} /站点名称 {$site_host} /站点域名 {$site_root} /安装目录 {$site_icp} /

  • swoole内置了几个全局变量供程序内使用。一般不要自行创建全局变量。 SwooleG 超全局本地内存变量,此变量在swoole_init时就初始化好了。存储了一些全局的信息。但不是共享内存的。当创建子进程后再修改其中的字段,其他进程是感知不到的 SwooleG.main_reactor,全局事件循环 SwooleG.lock,全局锁 SwooleG.memory_pool,全局共享内存池 Swo

  • 全局变量 PHP中在函数、类之外直接定义的变量可以在函数、类成员方法中通过global关键词引入使用,这些变量称为:全局变量。 这些直接在PHP中定义的变量(包括include、require文件中的)相对于函数、类方法而言它们是全局变量,但是对自身执行域zend_execute_data而言它们是普通的局部变量,自身执行时它们与普通变量的读写方式完全相同。 function test() {

  • 本文向大家介绍Lua中的全局变量、非全局变量总结,包括了Lua中的全局变量、非全局变量总结的使用技巧和注意事项,需要的朋友参考一下 前言 Lua将其所有的全局变量保存在一个常规的table中,这个table称为“环境”。这种组织结构的优点在于,其一,不需要再为全局变量创造一种新的数据结构,因此简化了Lua的内部实现;另一个优点是,可以像其他table一样操作这个table。为了便于实施这种操作,L