Javascript 同步jqueryajax调用
如何确保“测试数据”文本仅在书籍详细信息加载到vm.books中后才显示在控制台中,基本上需要执行同步ajax调用Javascript 同步jqueryajax调用,javascript,jquery,ajax,Javascript,Jquery,Ajax,如何确保“测试数据”文本仅在书籍详细信息加载到vm.books中后才显示在控制台中,基本上需要执行同步ajax调用 下面提到的代码未按预期工作。如何实现此预期功能的任何建议 $(document).ready(function() { var vm = new obj.Books(); vm.loadBooks(); console.log("Test Data"); }); var obj = obj || {}; obj.Books = function() { var s
下面提到的代码未按预期工作。如何实现此预期功能的任何建议
$(document).ready(function() {
var vm = new obj.Books();
vm.loadBooks();
console.log("Test Data");
});
var obj = obj || {};
obj.Books = function() {
var self = this;
self.books = [];
self.loadBooks = function() {
$.ajax({
url: "somewebapiurl",
dataType: 'jsonp',
async: false
})
.done(function(data) {
$.each(data, function(idx, item) {
self.books.push(item);
});
})
.fail(function(xhr, status, error) {
alert(status);
});
};
};
如何确保“测试数据”文本仅显示在控制台中
书籍详细信息加载到vm.books后,基本上要执行
同步ajax调用
只需利用jQuery延迟对象的函数
self.loadBooks = function() {
$.ajax({
url: "somewebapiurl",
dataType: 'jsonp',
})
.done(function(data) {
$.each(data, function(idx, item) {
self.books.push(item);
});
//do what you want or call the function you want
console.log("Test Data");
})
.fail(function(xhr, status, error) {
alert(status);
});
};
@jcubic是对的,jsonp不支持async=false的同步调用 所以,
- 在服务端启用CORS(即somewebapiurl)
- 设置原点详细信息(即原点=”http://localhost:19410“headers=“*” 方法=“获取”)
- 删除了数据类型='jsonp'
- 保留异步=false
现在,它正在按预期工作。跨域请求和数据类型:“jsonp”请求不支持同步操作。任何关于如何实现预期功能的建议。绝对不要阻塞线程。糟糕的性能和糟糕的用户体验。。。还有糟糕的JavaScript。使用回调或者更好的选择是使用jQuery的ajax延迟对象。您想使请求同步,还是想解决您的问题?因为同步调用是错误的解决方案。非常感谢您的编辑,我必须改进我的回答。我们无法修改self.loadBooks函数,loadBooks的责任是加载self.books数组。我们只需调用loadBooks并期望books数组中有值,然后显示文本并使用books数组,即我们可以显示数组中的书籍列表。@sameer您可以从loadBooks返回ajax承诺,然后使用
vm.loadBooks().done(function(){console.log(“Test Data”);})代码>