Jquery 使用foreach数据值创建AJAX调用
我基本上有一个“表单数据”列表,每个表单数据都包含一个属性。 每个属性都有各自独立的数据,如ID、QuestionText等 下面是我的HTML和pageitems的数据绑定,然后我将'attributeid'设置为表的id,这一切都很好 我现在要做的是,在它显示“$root.getAttributeTitle()”的地方,我需要进行一个ajax调用,以检索上面提到的“attributeid”的属性数据,但是每当我创建一个函数时Jquery 使用foreach数据值创建AJAX调用,jquery,ajax,knockout.js,Jquery,Ajax,Knockout.js,我基本上有一个“表单数据”列表,每个表单数据都包含一个属性。 每个属性都有各自独立的数据,如ID、QuestionText等 下面是我的HTML和pageitems的数据绑定,然后我将'attributeid'设置为表的id,这一切都很好 我现在要做的是,在它显示“$root.getAttributeTitle()”的地方,我需要进行一个ajax调用,以检索上面提到的“attributeid”的属性数据,但是每当我创建一个函数时 self.getAttributeTitle = function
self.getAttributeTitle = function(id){
var sTitle = '';
$.post(url, sendData, function(response){
sTitle = response.data.QuestionTitle;
});
return sTitle;
}
…它试图在ajax调用完成之前返回值
任何想法都将不胜感激
<!--ko foreach: pageitems-->
<table class="table" data-bind="attr: { id: $data.attributeid() }">
<tbody>
<tr>
<th colspan="2" data-bind="text: $root.getAttributeTitle($data.attributeid())"></th>
</tr>
<tr>
<td>
</td>
</tr>
</tbody>
</table>
您应该将代码延迟到Ajax调用完成,您不能期望代码立即从远程位置返回值。以下是如何更改getAttributeTitle函数的用法:
getAttributeTitle (id) {
var _this = this;
return $.post(url, sendData);
}
//then you can use it like this:
getAttributeTitle(id).done(function (response) {
console.log(response.data.QuestionTitle);
})
您应该延迟代码直到Ajax调用完成,您不能期望代码立即从远程位置返回值。以下是如何更改getAttributeTitle函数的用法:
getAttributeTitle (id) {
var _this = this;
return $.post(url, sendData);
}
//then you can use it like this:
getAttributeTitle(id).done(function (response) {
console.log(response.data.QuestionTitle);
})
您使用的是$.post,它是$.ajax的缩写,并且没有设置异步的选项。BU默认值$POST将考虑ASYNC=TRUE,这会导致在没有等待响应的情况下运行到下一行。 你必须把
$.ajaxSetup({ asynch: false })
在$.post之前,然后在末尾再次启用
$.ajaxSetup({ asynch: true }).
希望对您有所帮助。您使用的是$.post,它是$.ajax的缩写,并且没有设置异步的选项。BU默认值$POST将考虑ASYNC=TRUE,这会导致在没有等待响应的情况下运行到下一行。 你必须把
$.ajaxSetup({ asynch: false })
在$.post之前,然后在末尾再次启用
$.ajaxSetup({ asynch: true }).
希望这能有所帮助。不要绑定到数据获取函数调用,绑定到
可观察的,它是pageitems
的成员,并在填充pageitems
时执行异步数据获取。淘汰赛将在获得标题时填充标题
您需要修改fetch例程以填充observable,它可以灵活地工作:
self.getAttributeTitle = function(id, observable){
$.post(url, sendData, observable);
}
不要绑定到数据获取函数调用,绑定到作为pageitems
成员的observable
,并在填充pageitems
时执行异步数据获取。淘汰赛将在获得标题时填充标题
您需要修改fetch例程以填充observable,它可以灵活地工作:
self.getAttributeTitle = function(id, observable){
$.post(url, sendData, observable);
}
这就是ko的工作原理。你试过在.complete()
中保留return吗?我不确定它是否对你有帮助。你能用id获取所有标题列表并将其存储在一个数组中并进行查询吗(避免ajax调用)。请看,其中的共识是“不,他们不应该”!这就是ko的工作原理。你试过在.complete()
中保留return吗?我不确定它是否对你有帮助。你能用id获取所有标题列表并将其存储在一个数组中并进行查询吗(避免ajax调用)。请看,其中的共识是“不,他们不应该”!这就是ko的工作原理。你试过在.complete()
中保留return吗?我不确定它是否对你有帮助。你能用id获取所有标题列表并将其存储在一个数组中并进行查询吗(避免ajax调用)。请看,其中的共识是“不,他们不应该”!感谢您的回答,但我已经考虑过在$.post调用中使用async:false,但希望使用淘汰模型或示例来解决此问题,其中有人在不使用同步Ajax调用的情况下克服了此问题。感谢您的回答,但我已经考虑在$.post调用中使用async:false,但是我希望能用淘汰模型或示例来回答这个问题,有人在没有使用同步Ajax调用的情况下解决了这个问题。我很欣赏这个答案,但我已经考虑过在$.post调用中使用async:false,但是我希望能用淘汰模型或者一些例子来解决这个问题,而不使用同步Ajax调用。这就是我想要的。非常感谢。这就是我要找的。非常感谢。这就是我要找的。非常感谢。