同步Jquery Ajax调用

时间:2016-07-01 11:15:27

标签: 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 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);
      });
  };
};

2 个答案:

答案 0 :(得分:1)

  

如何确保"测试数据"文本仅显示在控制台中   在vm.books中加载书籍细节之后,基本上想要执行   同步ajax调用。

只需利用jQuery Deferred Object的.done函数。

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);
  });
};

答案 1 :(得分:0)

@jcubic是对的,jsonp不支持使用async = false进行同步调用。

因此,

  • 在服务端启用CORS(即somewebapiurl)
  • 设置原始详细信息(即origin =" http:// localhost:19410" headers =" *" 方法="获得" )
  • 删除了数据类型=' jsonp'
  • 保留async = false

现在它按预期工作了。