使用ajax从同一个javascript函数多次调用,对象在函数体和ajax成功回调之间的参数不相同
Multiple call from same javascript function with ajax, object in parameters not the same between the function body and the ajax success callback
当我用ajax调用javascript方法时,得到了一个奇怪的结果。当用户点击箭头时,它会加载数据,我不希望用户被卡住,所以我让他在需要的时候更改。当数据从服务器返回时,我希望在我的集合中的好对象处加载数据。
html(比这复杂一点,但很难粘贴,我认为这已经足够理解了):
<a href='#' data-bind='click:LoadExactResult'>Next</a>
js:
function LoadExactResult(dateObj) {
//method body
(function(dateObj) {
var payload = {
searchCriteriaParam: "",
};
console.log(moment() + " - Calling Exact Date: " + dateObj().Date());
dateObj().IsAllFlightLoading(true);
$.ajax({
url: 'bla/bla',
data: payload,
cache: false,
success: function(result) {
console.log(moment() + " - Exact Date Success: " + dateObj().Date());
// ajax body.
}
});
})(dateObj);
}
但是最后加载的对象的数据总是会返回。。。这是控制台日志。
1410377364469 - Calling Exact Date: Mon Jan 05 2015 22:00:00 GMT-0500 (Est) 1410377365234 - Calling Exact Date: Sun Jan 04 2015 21:10:00 GMT-0500 (Est) 1410377365539 - Calling Exact Date: Sat Jan 03 2015 20:40:00 GMT-0500 (Est) 1410377367559 - Exact Date Success: Sat Jan 03 2015 20:40:00 GMT-0500 (Est) 1410377370488 - Exact Date Success: Sat Jan 03 2015 20:40:00 GMT-0500 (Est) 1410377375648 - Exact Date Success: Sat Jan 03 2015 20:40:00 GMT-0500 (Est)
数组和对象在javascript中通过引用传递。你没有得到一个val,你得到的是dateobj的引用,如果在任何地方更改,就会在所有地方更改。我们需要"打破"参考通过修改传递到自执行函数中的参数。
function LoadExactResult(dateObj) {
//method body
(function(dateObj) {
var payload = {
searchCriteriaParam: "",
};
console.log(moment() + " - Calling Exact Date: " + dateObj().Date());
dateObj().IsAllFlightLoading(true);
$.ajax({
url: 'bla/bla',
data: payload,
cache: false,
success: function(result) {
console.log(moment() + " - Exact Date Success: " + dateObj().Date());
// ajax body.
}
});
})($.extend(true, {}, dateObj));
}
这个问题与dateObj
是从敲除中可观察到的事实有关,每次我都在调用dateObj()
。它正在重新计算值。我必须通过的不是一个可以观察到的敲除函数LoadExactResult
,而是一个真实的对象
function LoadExactResult(dateObj) {
//method body
var payload = {
searchCriteriaParam: "",
};
console.log(moment() + " - Calling Exact Date: " + dateObj.Date());
dateObj.IsAllFlightLoading(true);
$.ajax({
url: 'bla/bla',
data: payload,
cache: false,
success: function(result) {
console.log(moment() + " - Exact Date Success: " + dateObj.Date());
// ajax body.
}
});
}
相关文章:
- 在AJAX回调和呈现PIXIJS之间处理程序流时遇到了问题
- 什么'$.get和$.ajax之间的区别是什么
- alert和ajax之间的罕见错误
- 在使用JS的Ajax调用中,ajaxComplete和beforesend之间有什么区别
- 什么's使用脚本标记调用文件和ajax之间的区别
- 如何通过jQuery Ajax在HTML和PHP之间来回传输json字符串
- AJAX 调用和表单提交之间的延迟
- 我需要在jQuery函数和AJAX之间获取一个变量
- JQuery ajax在2个按钮之间切换's类具有2次单击事件,但无法更改按钮的值
- 在使用ajax调用的函数之间调用相同的函数
- 如何在使用模态的同时使用AJAX在js和php之间进行通信
- 了解 $.ajax() 和 $.ajax().then 之间的区别
- 在两者之间执行 ajax 时粘贴到输入时缺少按键事件
- 如何在 AJAX 请求 (Rails) 之间保留表单输入数据
- jQuery-replaceWith调用ajax之间的区别,反之亦然
- 在执行CORS时,getJSON和ajax之间的cookie差异
- Web应用:结合PHP和Javascript-AJAX之间的视图层
- AJAX之间的静态网页和谷歌应用引擎服务器共享相同的顶级域名
- Ajax和Ajax之间的区别是什么?调用返回JSON的操作方法时
- Google util.js 和 ASP.NET AJAX 之间的冲突