2012-07-25 39 views
0

爲什麼設置數據在$getJson調用中不起作用。 WTF變量未在getJson調用中設置。此外,另一個問題是爲什麼$(this).html()不能在getJson呼叫中設置。我在全局範圍內定義了wtf變量,但是我沒有從getJson函數獲得值,我想知道爲什麼數據不可訪問。這通過ajax函數和async: seto to false來解決。我有我的解釋,但我希望你的解釋提前謝謝。

<script type="text/javascript"> 
     $(function() { $('a[id=talentNaslov]').before(function() { 
      var id = $(this).html(); 
      var data=null;    
      $.getJSON("url", { id: id },function (talentNaziv) { 
        data=talentNaziv; 
// data variable is not set still null and also $(this) is not set when i use it// 
       });   
      $(this).html(data); 
      }); 
     }); 
</script> 
+0

你怎麼 '前' 想將工作?數據的問題在於它異步設置,但您正在同步訪問它。 – sabithpocker 2012-07-25 23:23:46

+0

如何同步意味着呼叫的順序是什麼? – 2012-07-25 23:31:49

+0

我已經添加了一些解釋 – sabithpocker 2012-07-25 23:47:45

回答

1

爲什麼設置數據不在$的getJSON call.WTF變量工作不在的getJSON 集撥打

設置數據應該是做工精細用的getJSON,嘗試:

$.getJSON("url", { id: id },function (data) { 
        alert(data); 
       }); 

我全局定義跆拳道wariable,但它不從的getJSON獲得價值 功能,爲什麼數據不可訪問。這是通過ajax 函數和async解決的:seto爲false。

這是因爲的getJSON是一個異步調用,這意味着以後的getJSON的代碼,你的情況$(this).html(data);起犯規等到回調的getJSON你在哪裏設置data執行。

所以會發生什麼是獲取JSON的請求發送,而不等待響應下一行代碼執行。這種行爲是有用的,因爲整個程序不會等待通過網絡獲取內容的比較長的延遲。在你的情況下,當調用$(this).html(data);時,它只能保證發送JSON請求,你仍然沒有回覆,並且data仍然爲空。

您嘗試的一種可能的解決方案是將ajax設置爲「同步」,但不建議這樣做,並且jQuery看起來好像不贊成,因爲它的確是一種糟糕的編程習慣。

如此說來,該溶液是將需要將數據傳輸到的getJsoncall back function或正在使用的異步方法之後進行的邏輯。

也是另一個問題是,爲什麼$(本)。html的()不能內部 的getJSON呼叫進行設置。

getJson有一個回調函數作爲它的最後一個參數,你指的是這個函數,你有this,因爲不是預期的。

$.getJSON("url", { id: id },function (talentNaziv) { 
       //this?? 
       }); 

在JavaScript中這始終是指我們 功能的「所有者」執行,或者說,對象是一個函數的方法。

函數的所有者不是jQuery對象$('a[id=talentNaslov]')如你想的那麼this犯規指向它。

我還沒有明白爲什麼你以前使用的方式很尷尬,可能會加上你的意圖和問題會給你更具體的答案或更多的解決問題的方法。

UPDATE

從其他的回答您的評論,它看起來像你正在尋找類似:

$('a.beforeme').each(function(){ 
    var $ele = $(this); 
    var id = $ele.html();//var id = $(this).html(); 
    $.getJSON('/echo/json/',{id: id},function(data){ 
     data = {msg: "this is it"}; // you will not need it 
     console.log(data.msg); 
     $ele.before(data.msg); 
     }); 
}); 

小提琴http://jsfiddle.net/PYhhS/1/

+0

當我說設置數據我的意思是在getjson調用byits響應設置wtf變量,我不能移動回調函數內部的邏輯因爲它需要id作爲參數,我通過解析「a」標籤解析想要的ID。 – 2012-07-26 00:43:10

+0

你檢查了更新部分,我已經將$ this保存爲$ ele,所以您可以以$ ele的形式訪問jsonCall中的相應'a'。 $ ele =相應的'a'。 – sabithpocker 2012-07-26 00:48:42

+0

工作就像一個魅力;)你可以解釋這個VAR $ ele它是什麼引用,或者我的意思是它可以在geJson函數中訪問,$(這個)不是...... tnx你非常:) – 2012-07-26 01:29:07

0

設置數據不能正常工作,因爲你試圖設置響應範圍以外的數據。此外,作爲提示,您可以使用散列符號(請參見下文)通過id來標識元素。從我可以告訴,我認爲你正在尋找的東西是這樣的:(用「talentNaslov」的ID鏈接之前插入響應數據作爲元素

$.getJSON("url", { id: id },function (data) { 
    $('a#talentNaslov').before(data)); 
});   

$(本)的.html不能在通話的getJSON「本」就是現在這個範圍內的AJAX(XHR)對象的引用內部設置。

+0

我有多個相同的一個帶有相同id的頁面,它們的html和href不同。我使用這個函數來改變它們的html,它是帶有文本的Id號碼。如果我使用你的代碼,它會用最後一個值來設置它們中的每一個,這就是爲什麼我想用它來區別一個值。問題是,即使我使用全局變量,$ this也不能用於getJson調用。 – 2012-07-25 23:19:41