2015-12-10 104 views
0

我想要做的是調用js方法,它使用ajax調用REST服務,然後將該響應返回給原始調用。聽起來很簡單,但我一直沒能在SO上找到足夠的答案來實現它。從js方法返回jax方法調用REST服務的值

如果異步是真的,我得到未定義。如果我將async設置爲false,它將起作用,但它會阻止加載頁面。我嘗試過使用Promise和回調的不同例子進行了幾次嘗試,但都沒能弄明白。我知道我缺少一些非常基本的東西,或者我沒有把握的概念。

在這個例子中,我想檢查一個物品是否在拍賣的人物觀察列表上。如果是,則會將圖標類設置爲活動狀態,以便更改圖標顏色,並且可以看到它在監視列表中。如果不是,它仍然是灰色的。

每個頁面都會有一些像這個例子一樣的東西。

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

} 

我確定我需要一個回調函數或者其他東西,但是我沒有對這些工作進行過嘗試。

只是爲了澄清。所有的代碼都是按照原樣工作的,它不是異步工作的。我想要的是將異步設置爲true,以便我正在進行實際的異步調用,以便這不會阻止加載頁面。我需要將ajax調用返回的值提供給Page1.php中的var。

在此先感謝。

回答

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' 
    }) 
},