2010-06-02 21 views
0

爲了使函數調用到我們的後端PHP代碼,我們已經實現了一種叫做ActionProxy這樣的:的getJSON和變量的作用域在JavaScript

function ActionProxy(action, input, callback){ 
    $.post("ActionProxy.php?method="+action, 
     { data: input}, 
      function(data, textStatus, XMLHttpRequest){ 
         //return data.ResponseWhatever 
         } 
}); 

我們遇到的問題是,使用數據所述ActionProxy外面是不可能的,因爲可變範圍的限制(我們假設),設置
var res = data.ResponseWhatever

return data.ResponseWhatever

是相當無效的。如何最恰當地處理這些響應,以便調用actionproxy的函數可以訪問響應值?

回答

1

您可以使用window.ResponseWhatever = data.ResponseWhatever,但是,這不是最聰明的事情。你需要的是做這樣的事情:

function ActionProxy(action, input, callback){ 
    $.post("ActionProxy.php?method="+action, {data:input}, 
     function(data, textStatus, xhr){callback(data);}); 
} 

注:我沒有jQuery的大師,所以我可能已經得到了一些jQuery的部分錯誤的,但關鍵是要打電話return data你改爲撥打callback(data);

+0

我們實際上也是這樣想的,但由於我們並不總是想要回調,所以我們有時只想收到返回值。這是否可能,或者這是「應該」寫出來的方式? – nillls 2010-06-02 18:37:30

+1

只要調用是異步的,您就不能使用'return',並且由於它是阻塞操作(甚至在UI凍結的許多瀏覽器中),您實際上不希望執行同步請求。 – 2010-06-02 18:50:01

0

嗯,我確實分類了由Alxandr提供的解決方案。事實證明,如果我想要結果,我將不得不實施回調,但爲了不關心結果,我只需用前兩個參數調用ActionProxy,並檢查回調函數是否如下所示:
function ActionProxy(action, input, callback){

$.post("ActionProxy.php?method="+action, {data:input}, function(data, textStatus, xhr){
if(callback){
callback(data); }
});

}

我會期待一個錯誤調用三個參數與兩個參數。噢 - javascript是一種奇怪的語言。 :)