从js方法返回值,并使用ajax调用REST服务

时间:2015-12-10 17:06:03

标签: javascript jquery ajax asynchronous methods

我要做的是调用一个使用ajax调用REST服务的js方法,然后将该响应返回给原始调用。听起来很简单,但我还没有在SO上找到足够的答案才能让它发挥作用。

如果async为true,我会得到undefined。如果我将async设置为false,它可以工作,但它会阻止页面的加载。我尝试了几次尝试使用promises和callbacks的不同示例,但只是无法弄明白。我知道我缺少一些非常基本的东西,或者我无法理解的概念。

在这个例子中,我想检查某个项目是否在拍卖的人员监视列表中。如果是,则将图标类设置为活动状态,以便更改图标颜色,并且可以看到它位于监视列表中。如果不是,它仍然是灰色的。

每个页面都会有一些类似这样的例子。

Page1.php

jQuery(document).ready(function($){

var w = mgapp.checkWatchlist($id, localStorage.u_pcjid);
if(!w.error){
  $("#watchlist").removeClass('watchlist').addClass('watchlist-active');
}

});

该方法位于script.js页面上。从ajax调用返回的数据是一个JSON对象 注意:async当前设置为false只是为了让它工作。

script.js  

var mgapp = {

checkWatchlist: function($iid, $uid) {
    var $msg;
    $.ajax({
     url: 'https://somedomain/api/v1/watchlist/item/' + $iid + '/' + $uid,
     type: "GET",
     headers: {"Authorization": localStorage.u_apikey},
     contentType: 'application/json',
     async: false
  }) 
  .done(function(data){
      $msg = data;
  })
  .fail(function(data){
    $msg = data;
  });   
 return $msg;      
}

}

我确信我需要一个回调函数或其他东西,但我对这些函数的尝试都没有奏效。

只是澄清一下。所有代码都按原样工作,它不是异步工作。我想要的是将async设置为true,以便我进行实际的异步调用,这样就不会阻止页面的加载。我需要从Page1.php上的var可用的ajax调用返回的值。

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果想出来的话。

    var w = mgapp.checkWatchlist($id, localStorage.u_pcjid).done(function() {
    if(!w.responseJSON.error){
      $("#watchlist").removeClass('watchlist').addClass('watchlist-active');
    }
})




  checkWatchlist: function($iid, $uid) {
    return $.ajax({
     url: 'https://somedomain.c9.io/api/v1/watchlist/item/' + $iid + '/' + $uid,
     type: "GET",
     headers: {"Authorization": localStorage.u_apikey},
     contentType: 'application/json'
  }) 
},