使用ajax从同一javascript函数多次调用,函数体和ajax成功回调之间的参数中的对象不相同
当我用ajax调用javascript方法时,得到了一个奇怪的结果。当用户单击箭头时,它会加载数据,我不希望用户被卡住,所以我让他在需要时进行更改。当数据从服务器返回时,我想在我的集合中的好对象上加载数据 类似的html(比这稍微复杂一点,但很难粘贴,我认为这足以理解): 但是最后加载的对象的数据总是返回。。。这是控制台日志使用ajax从同一javascript函数多次调用,函数体和ajax成功回调之间的参数中的对象不相同,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,当我用ajax调用javascript方法时,得到了一个奇怪的结果。当用户单击箭头时,它会加载数据,我不希望用户被卡住,所以我让他在需要时进行更改。当数据从服务器返回时,我想在我的集合中的好对象上加载数据 类似的html(比这稍微复杂一点,但很难粘贴,我认为这足以理解): 但是最后加载的对象的数据总是返回。。。这是控制台日志 数组和对象在javascript中通过引用传递。你没有得到val,你得到的是dateobj的引用,如果在任何地方更改,就会在任何地方更改。我们需要“打破”参照物 通过修改传
数组和对象在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
是一个可以从knockout中观察到的对象,每次我调用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.
}
});
}
如果看不到对LoadExactResult()的调用,很难猜测发生了什么。看起来您正在使用同一个对象重复调用它,尽管每次使用不同的值。当各种
ajax
调用返回时,它们正在打印调用对象的当前值。。我有一个会议,之后我会发布更多信息。数组和对象在javascript中通过引用传递。你没有得到val,你得到的是dateobj的参考,如果在任何地方更改,就会在任何地方更改。你应该在回答中包括对你的评论的解释。只包含代码的答案不好,因为您将dateObj
更改为$的原因不太清楚。extend(true,{},dateObj)
您好,谢谢您的答案,很抱歉反应太晚。问题不在于,这与dateObj是一个可从敲除中观察到的事实有关,每次我调用dateObj()
。它正在重新计算值。我必须传递给函数LoadExactResult
,而不是一个可观察到的敲除,而是一个真实对象
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)
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));
}
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.
}
});
}