Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.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 使用异步ajax时,从不同模型传递信息_Jquery_Ajax_Knockout.js_Knockout 2.0 - Fatal编程技术网

Jquery 使用异步ajax时,从不同模型传递信息

Jquery 使用异步ajax时,从不同模型传递信息,jquery,ajax,knockout.js,knockout-2.0,Jquery,Ajax,Knockout.js,Knockout 2.0,我想从名为“Perm_Collabors”的ObservalArray中的一个名为ClientDetails的索引中获取信息,并将该索引中的值传递给数据库名为“Collaberators”的InputFields中名为CollabList的ObservalArray。现在,我在chrome浏览器和其他浏览器arnt中都能很快地完成这项工作。我可能在尝试将数据放入不存在的字段时遇到问题,因为信息来自ajax,因此当前是异步的。所以我尝试用一个在chrome上运行良好的订阅来实现这一点,而不是在其他

我想从名为“Perm_Collabors”的ObservalArray中的一个名为ClientDetails的索引中获取信息,并将该索引中的值传递给数据库名为“Collaberators”的InputFields中名为CollabList的ObservalArray。现在,我在chrome浏览器和其他浏览器arnt中都能很快地完成这项工作。我可能在尝试将数据放入不存在的字段时遇到问题,因为信息来自ajax,因此当前是异步的。所以我尝试用一个在chrome上运行良好的订阅来实现这一点,而不是在其他任何地方。最好的方法是什么。一如既往,如果您需要更多信息,请咨询!谢谢Calvin。

好的,有几件事可以帮助您解决跨浏览器问题

首先,这条线

function UserInformation(data) {
    var self = this;
    this.AddressDetails = ko.observable(data.AddressDetails)
    // Client Details is array of ClientDetailInfo
    this.ClientDetails = ko.observableArray(data.ClientDetails);
    this.UserID = ko.observable(data.UserID);
}
function ClientDetailInfo(data) {
  this.Name = ko.observable(data.Name);
  this.Value = ko.observable(data.Value);
}
function InputFieldInfo(data) {
  this.DatabaseName = ko.observable(data.DatabaseName);
  this.Value = ko.observable(data.Value);
  // collab list gets filled when a user adds collaborators from the ui
  this.DatabaseName.CollabList = ko.observableArray([]);
}
function ViewModel() {
  var self = this;
  this.Name = ko.observable("");
  this.InputFields = ko.observable([]);

  //ajax request that maps data to InputFields

  //ajax request that maps data to User

}
您是否正在检查DatabaseName是否未定义?其次,您没有得到DatabaseName的可观察值,只是得到函数。你可能想要这个:

this.DatabaseName.CollabList = ko.observableArray([]);
第二,手工订阅。有时,特别是异步加载数据时,您不希望在Y完成更新之前更新X变量。比如说

this.DatabaseName().CollabList = ko.observableArray([]); 
关于从ClientDetails获取信息,假设所有变量都已正确连接,则只需对每个变量执行
foreach

this.myObservableArray = ko.observableArray([]);
this.myObservableArray.subscribe(function(newValueOfMyObservableArray) {
      $.ajax({..., success: function(data) {
         this.mySecondObservableArray(data);
      }})
}, this);

谢谢你花时间回答我的问题。
function transferData(clientDetails, inputFields) {
var localClient = {};
ko.utils.arrayForEach(clientDetails(), function(client) {
    if (client.name === "Perm_Collabs") localClient = client;
});

ko.utils.arrayForEach(inputFields(), function(field) {
    if (field.databaseName === "Collaberators") {
        //Do whatever with localClient
    }
});

// Or if you need to replace in the same index you can skip the second loop
var index = clientDetails.indexOf(localClient); // Or do a forloop and save this step;
inputfields()[index].client = client;
}