jQueryAJAX函数被多次调用,但数据只在第一次调用时被提取
jQuery AJAX function called multiple times but data is only pulled on first call
我有一个jQuery函数,用于从flask服务器上的XML文件中提取数据。我从调用这个函数开始我的ready函数,我的所有变量都会毫无问题地更新。然而,当我通过点击操作第二次调用该函数时,我的变量不会更新。我知道AJAX函数被成功调用是因为我收到了警报。在第一次调用之后,XML文档似乎没有被重新加载。如何在每次调用函数时更新变量。
全局变量
//Variables representing Sensor Data
var bspeed=0;
var set_temp=0;
var f_temp=0;
var fuel_level=0;
var s_temp=0;
var humidity=0;
var bspeed_data=0;
var set_temp=0;
var mode = "mod";
var mod_mode = "blower";
数据拉取功能
//AJAX XML file parsing
function pull_data(){
//Gather Data from main.xml and store into variables
$.ajax({
type: "GET",
url: "static/main.xml",
async: false,
success: function(xml){
$(xml).find('item').each(function(){
var id = $(this).find('id').text();
switch(id){
case "ftemp_data":
f_temp = $(this).find('value').text();
break;
case "stemp_data":
s_temp = $(this).find('value').text();
break;
case "fuel_level_data":
fuel_level = $(this).find('value').text();
break;
case "humidity_data":
humidity = $(this).find('value').text();
break;
case "blower_speed":
alert("Changing bspeed");
bspeed_data = $(this).find('value').text();
}
});
alert("Pull Success "+ bspeed_data);
},
error: function(data){
alert("AJAX failed: "+ data.status + ' ' + data.statusText);
}
});
//Populate HTML with variables
$("#ftemp_data").text(f_temp+("'u00B0"));
$("#stemp_data").text(s_temp+("'u00B0"));
$("#fuel_level_data").text(fuel_level+"%");
$("#humidity_data").text(humidity+"%");
$("#bspeed_data").text(bspeed_data);
}
就绪功能(简化)
$(document).ready(function(){
pull_data();
//Click Refresh Button
$("#refresh_btn").click(function(){
pull_data();
});
}
我对网络开发还很陌生,所以可以随意指出我正在做的事情的结构问题。
可能需要强制刷新缓存,为了做到这一点,在ajax代码中添加一个属性缓存:false:
$.ajax({
type: "GET",
url: "static/main.xml",
async: false,
cache: false,...
您可以查看Jquery Ajax文档
我认为你正在获得缓存的响应,你需要在url中添加时间戳,
var date = new Date();
var timestamp = date.getTime();
$.ajax({
type: "GET",
url: "static/main.xml?="+timestamp
})
看起来您在成功的请求回调中更新了变量的值,但是您更新文本表示的代码是在AJAX函数之外调用的。这意味着当调用函数时,会发出AJAX请求,并且在请求完成之前更新DOM。更新变量后,您需要将DOM更新逻辑移动到$.ajax的成功处理程序中
您似乎得到了缓存的响应。您应该在请求选项中使用cache: false
,但我也建议删除async: false
选项,因为您无论如何都在使用回调来更新变量的值。这是更新后的代码:
//AJAX XML file parsing
function pull_data(){
//Gather Data from main.xml and store into variables
$.ajax({
type: "GET",
url: "static/main.xml",
async: false,
success: function(xml){
$(xml).find('item').each(function(){
var id = $(this).find('id').text();
switch(id){
case "ftemp_data":
f_temp = $(this).find('value').text();
break;
case "stemp_data":
s_temp = $(this).find('value').text();
break;
case "fuel_level_data":
fuel_level = $(this).find('value').text();
break;
case "humidity_data":
humidity = $(this).find('value').text();
break;
case "blower_speed":
alert("Changing bspeed");
bspeed_data = $(this).find('value').text();
}
});
alert("Pull Success "+ bspeed_data);
//Request was successful, populate HTML with variables
$("#ftemp_data").text(f_temp+("'u00B0"));
$("#stemp_data").text(s_temp+("'u00B0"));
$("#fuel_level_data").text(fuel_level+"%");
$("#humidity_data").text(humidity+"%");
$("#bspeed_data").text(bspeed_data);
},
error: function(data){
alert("AJAX failed: "+ data.status + ' ' + data.statusText);
}
});
}
相关文章:
- innerHTML的子字符串可以在初始调用时提取吗
- jQueryAJAX函数被多次调用,但数据只在第一次调用时被提取
- 我可以将 AJAX 调用放在表示组件中,还是应该提取容器
- 显示从AJAX调用中提取的特殊字符时出现问题
- 提取并调用在元素的 onclick HTML 属性中定义的 JavaScript 函数(使用 jQuery attr/p
- 如何在调用模型提取时在主干中创建加载屏幕
- 如何在 Django 中使用 ajax 调用从外部脚本中提取数据
- 进行 ajax 调用,如果不是所需的结果,则提取一个值,然后继续重复,直到达到所需的结果
- 如何通过NRQL查询使用JavaScriptAjax调用在客户端获取/提取NewRelicInsights数据
- 如何提取用于调用JS脚本的GET参数
- 我的ajax调用没有从PHP/Mysql中提取动态数据
- 我们如何从dojo.io.iframe.send调用中提取状态代码?
- Alfresco:如何从客户端js调用共享webscript并提取JSON数据
- 从JSON调用Postgres表中提取数据以用于Highcharts(不使用PHP)
- 从ajax调用中提取数据到数组
- 在ajax调用期间从parsedHTML中提取javascript变量
- 用于提取javascript方法调用的正则表达式
- Jquery插件:从调用器中提取数据
- 使用Javascript从Django REST API调用返回的JSON中提取错误消息
- 如何提取保存到DOM的四方形access_token作为链接,以便将其用于API调用