Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 使用foreach数据值创建AJAX调用_Jquery_Ajax_Knockout.js - Fatal编程技术网

Jquery 使用foreach数据值创建AJAX调用

Jquery 使用foreach数据值创建AJAX调用,jquery,ajax,knockout.js,Jquery,Ajax,Knockout.js,我基本上有一个“表单数据”列表,每个表单数据都包含一个属性。 每个属性都有各自独立的数据,如ID、QuestionText等 下面是我的HTML和pageitems的数据绑定,然后我将'attributeid'设置为表的id,这一切都很好 我现在要做的是,在它显示“$root.getAttributeTitle()”的地方,我需要进行一个ajax调用,以检索上面提到的“attributeid”的属性数据,但是每当我创建一个函数时 self.getAttributeTitle = function

我基本上有一个“表单数据”列表,每个表单数据都包含一个属性。 每个属性都有各自独立的数据,如ID、QuestionText等

下面是我的HTML和pageitems的数据绑定,然后我将'attributeid'设置为表的id,这一切都很好

我现在要做的是,在它显示“$root.getAttributeTitle()”的地方,我需要进行一个ajax调用,以检索上面提到的“attributeid”的属性数据,但是每当我创建一个函数时

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调用。这就是我想要的。非常感谢。这就是我要找的。非常感谢。这就是我要找的。非常感谢。