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

AJAX不更新变量

赏夕
2023-03-14
问题内容

jQuery的

我正在发出一个AJAX请求,该请求会foo使用服务器的响应来更新变量()的值。这是我正在使用的代码:

//## My variable ##

var foo = "";


//## Send request ##

$.ajax({
    url: "/",
    dataType: "text",
    success: function(response) {
        foo = "New value:" + response;
    },
    error: function() {
        alert('There was a problem with the request.');
    }
});


//## Alert updated variable ##

alert(foo);

问题是的值foo仍然是一个空字符串。我知道这不是服务器端脚本的问题,因为我会收到错误警报,或者至少得到string "New value:"

这是一个演示问题的JSFiddle:http :
//jsfiddle.net/GGDX7/

为什么foo不变的价值?

纯JS

我正在发出一个AJAX请求,该请求会foo使用服务器的响应来更新变量()的值。这是我正在使用的代码:

//## Compatibility ##

var myRequest;
if (window.XMLHttpRequest) {
    myRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) {
    myRequest = new ActiveXObject("Microsoft.XMLHTTP");
}


//## My variable ##

var foo = "";


//## Response handler ##

myRequest.onreadystatechange = function() {
    if (this.readyState === 4) {
        if (this.status === 200) {
            foo = "New value:" + this.responseText;
        } else {
            alert('There was a problem with the request.');
        }
    }
};


//## Send request ##

myRequest.open('GET', "response.php");
myRequest.send();


//## Alert updated variable ##

alert(foo);

问题是值的值foo保留为空字符串。我知道这不是服务器端脚本的问题,因为我会收到错误警报,或者至少得到string "New value:"

这是一个演示问题的JSFiddle:http :
//jsfiddle.net/wkwjh/

为什么foo不变的价值?


问题答案:

当您提醒的值时foo,成功处理程序尚未触发。由于是成功处理程序重新分配了变量,因此其值仍为空字符串。

事件的时间表如下所示:

  1. foo 被分配空字符串
  2. 创建并调度了AJAX请求。
  3. 的值foo被警告。(请注意,foo尚未更改)
  4. AJAX请求完成。
  5. foo = "New value:" + this.responseText;

由于我们要foo 更改 提醒警报的值,因此解决方案是将警报放入成功回调中。

现在,它将在收到AJAX响应后执行。



 类似资料:
  • 在 redux 基本概念的不可变数据管理 中给出一些示例,演示了不可变的基本更新操作,例如,更新一个对象中一个字段,或者,在数组的末尾增加一个数据。然而,reducer 经常需要综合使用这些基本操作去处理更加复杂的任务。下面是一些你可能必须去实现的常见任务的例子。 更新嵌套的对象 更新嵌套数据的关键是必须适当地复制和更新嵌套的每个级别。这往往是那些学习 redux 一个难以理解的概念,当试图更新嵌

  • App.js中有一个全局变量,该变量在我的应用程序组件之外设置。 它监视棋盘游戏正在进行的移动。在黑板下面是一些导航按钮。如果您单击

  • 问题内容: 我喜欢使用ajax用新值更新表。有什么想法。我有一个购物车,用户可以在其中更改产品的数量。我不喜欢重新加载整个页面。我想重新加载桌子。目前,它可以重新加载整个页面。 我做了什么。 我有一个输入数量值的表格。要将产品与购物车(ManyToMany)连接,我使用line_item。因此,每个line_item代表购物车中的产品。 购物车的此视图 渲染@cart Line_items具有更新

  • 我们使用liquibase对数据库进行源代码控制。最初,我们从Postgres开始,创建了数据类型为特定于Postgres的列的变更集。 例如,我们有一个变更集,它创建了具有“JSON”类型字段的表。现在,我们想转移到其他数据库。因此,当我们针对另一个数据库运行变更集时,它无法创建表。我尝试添加“failOnError=false”。但是,后面的变更集失败,因为该表不存在。 您能建议如何重构旧的变

  • 我正在重写AJAX函数,以便使用WooCommerce添加产品,这样我也可以将属性发送到购物车(这不是开箱即用的)。 在通过AJAX添加变量产品后,我按照更新WooCommerce购物车的说明进行了操作——这正是我想要的——但它并不完全有效。 当我注销时,一切都很好。但是,当我登录Wordpress时,PHP覆盖不起作用/被忽略。我没有收到任何错误,也没有向购物车添加任何产品。我尝试了许多不同的方

  • 问题内容: 现在,使用AJAX的最大问题是,如果我在一个页面上使用AJAX,请转到另一个页面,然后使用浏览器的“后退”按钮返回使用AJAX更改的所有内容。 我曾考虑过使用jQuery Addresss 插件来解决该问题,但我不喜欢它仅用“#whatever.html”来修改URL而不是完全更改它。 理想情况下,当我进行相关的AJAX调用时,我希望URL从“ www.example.com/p:2/