Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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
Javascript 同步jqueryajax调用_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 同步jqueryajax调用

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

如何确保“测试数据”文本仅在书籍详细信息加载到vm.books中后才显示在控制台中,基本上需要执行同步ajax调用


下面提到的代码未按预期工作。如何实现此预期功能的任何建议

$(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”);})