2014-02-14 184 views
-2

我有一個範圍問題,我無法弄清楚。

請參閱此代碼:

setTimeout(function() { 
    var jq = $.ajax({ 

      }); 

    jq.done(function(data){ 

    }) 
},1000); 

// How to access jq object here? 

如何訪問JQ之外的setTimeout?這裏有一個活樣本http://jsfiddle.net/g54Cx/

+0

範圍變量超時。你想用它做什麼? – Mathletics

+0

我試過了,它不起作用。還有什麼關於「全局變量是壞」的建議 – Thomasmkov

+1

如果問題是_how我可以訪問jq_那麼它絕對工作。但是,'jq'的VALUE可能不是您認爲的值。告訴我們你想要做什麼;你在這裏遇到了一個XY問題。 – Mathletics

回答

0

移動var jq;出超時定義的,就像這樣:

var jq; 

setTimeout(function() { 
     jq = $.ajax({ 

     }); 

     jq.done(function(data){ 

     }) 
}, 1000); 

console.log(jq); 
+0

在這種情況下,在settimeOut之後調用的jq不包含像jq.always()那樣的方法,不能在setTimeout之後調用 – Thomasmkov

+1

是的,當然。它將在1000毫秒後纔可用。 –

0

除了其他建議...

你可以將它傳遞給另一個函數: http://jsfiddle.net/7aZdm/

myFunction(jq) { 
    //access in here 
} 

setTimeout(function() { 
    var jq = $.ajax({ 
       url: "/echo/json/", 
       type: "POST", 
       data: {json: '{"message": "Hello"}'}, 
       dataType: "json" 
      }); 
    myFunction(jq); 
    jq.done(function(data){ 
     $("#msg").text("Response is = " + data.message); 
    }) 
},1000); 

或只是將它分配給窗口對象,但這通常是不好的做法

window.jq = jq