我在主线程上获得同步XMLHttpRequest已被弃用,因为它对最终用户的体验产生了不利影响。 我已经调查了这篇文章,但无法找到适合我需要的任何内容。
alternative to async: false ajax
$(docucment).ready(function(){
var obj=AppendFileList(10);
$.each(obj.Table, function (key, value) {
//some code to do some task
});
});
function AppendFileList(lotid) {
$.ajax({
type: "POST",
url: "XYZ/GetAttachements",
data: JSON.stringify({ LotId: lotid, GUID: $('#hidnuniqueid').val() }), // LotId: arr1[1],
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data, status) {
var obj = jQuery.parseJSON(data.d);
console.log(obj);
return obj;
},
failure: function (data) {
console.log(data);
},
error: function (data) {
console.log(data);
console.log(data.Message);
}
});
}
我不想将ajax()方法保留在一个单独的函数中,就像我在我的示例中所示,这样我就不必一次又一次地编写ajax调用。这可能吗?
答案 0 :(得分:1)
所有依赖于AJAX请求结果的逻辑都应该放在success
回调中。为此,您可以将匿名函数传递给AppendFileList()
函数。试试这个:
$(document).ready(function(){
AppendFileList(10, function(data) { // data = the JSON retrieved
$.each(obj.Table, function (key, value) {
// some code to do some task
});
});
});
function AppendFileList(lotid, callbackFn) {
$.ajax({
type: "POST",
url: "XYZ/GetAttachements",
data: {
LotId: lotid,
GUID: $('#hidnuniqueid').val()
},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data, status) {
callbackFn(data); // use your callback here, passing it the retrieved data
},
error: function (data) {
console.log(data);
console.log(data.Message);
}
});
}
请注意,您不需要使用JSON.stringify
发送data
或反序列化响应,因为jQuery会自动为您执行此操作,并且$.ajax()
方法没有{{ 1}}设置中的属性。