为什么这里的选项未定义?从这个ajax调用填充DisplayThisArr
然后我转到另一个函数并对另一个api进行另一个ajax调用并使用一些数据将另一个属性添加到DisplayThisArr
然后我想显示修改DisplayThisArr
但由于某种原因,我得到Uncaught TypeError: Cannot read property 'success' of undefined
。
更深入了解here到完整的问题
dataSource: new kendo.data.DataSource({
schema: {
model: {
1: { type: "string" },.
2: { type: "string" },
3: { type: "string" },
4: { type: "string" },
5: { type: "string" },
6: { type: "string" },
7: { type: "string" },
propertyImAdding: { type: "number" },
}
},
batch: true,
transport: {
read:
function(options) {
$.ajax({
url: 'https://localhost:port/api/blah/blah',
dataType: 'json',
async: false,
data: data,
success: function(json) {
DisplayThisArr = json;
vM.getOtherData(); //Get another [] of json objects from another api and mod DisplayThisArr
options.success(DisplayThisArr); //Display the modified DisplayThisArr array
}
});//end ajax
}//end function(options)
}
})//End datasource
答案 0 :(得分:1)
success
不是options
的属性。根据您似乎想要做的事情,您需要有一个单独的函数来显示数组的内容,并在每个ajax
成功处理程序中调用它。
您将async
设置为false
这一事实表明您对ajax
的工作方式缺乏了解。 success
是一个回调函数,当资源从服务器返回时,无论何时发生,都会执行该函数。如果您需要向服务器发出多个请求(很少但可能),那么最好的'实现这一目标的方法是将第二个ajax
调用放在第一个成功处理程序中:
$.ajax({
url: 'myscript.php',
success: function(resp) {
//do stuff to the array based on response
$.ajax({
url: 'otherscirpt.php',
success: function(data) {
//do more stuff based on other response
display(myArray);
}
});
}
});
如果你可以在一个独家新闻中获取所有数据,它真的是最好的,但是有时服务器上的内存限制会超出你的控制范围会强制它,有时候数据需要按顺序排列,但是你可以这样做以上链接回调,而不是将async
设置为false
。
答案 1 :(得分:0)
它没有被定义,因为它可能(可能不是,这对于this
变量的内容来说是典型的),超出了函数success
的范围。试试这种方式
function(options) {
var optns = options;
$.ajax({
url: 'https://localhost:port/api/blah/blah',
dataType: 'json',
async: false,
data: data,
success: function(json) {
DisplayThisArr = json;
vM.getOtherData();
optns.success(DisplayThisArr);
}
});//end ajax
}//end function(options)
或者您未在函数options
)
read