2009-09-27 75 views
1
$("select[name=field[]]").live("change", function() { 
      $.getJSON("/json.php",{id: $(this).val(), ajax: 'true'}, function(j){ 
       options = ''; 
       for (var i = 0; i < j.length; i++) { 
        options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>'; 
       } 
      }); 
      $(this).siblings("[name=logic[]]").html(options); 
     }); 

所以,我想把json回調的結果(它放在options,一個全局變量中)放到首先激活事件的對象的同級中。我上面的代碼在這方面幾乎成功了,但並不奏效,因爲回調不會立即發生,所以它會在同級中保留一個空字符串。在此先感謝,對不起,如果我有任何術語錯誤:)jQuery:製作json請求,在回調中處理它,在回調函數外部訪問它?

回答

2

我認爲你正在向後看。您可以更容易地使外部變量可用於內部函數。這裏的想法:

$("select[name=field[]]").live("change", function() { 
    var theSelect = $(this); 
    $.getJSON("/json.php",{id: $(this).val(), ajax: 'true'}, function(j){ 
     options = ''; 
      for (var i = 0; i < j.length; i++) { 
        options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>'; 
      } 
      theSelect.siblings("[name=logic[]]").html(options); 
      }); 
    }); 

我也有一個擔心。看起來你正試圖將選項添加到觸發事件的select中。他們是孩子,而不是兄弟姐妹。他們的方式,你會得到它,這將添加選項,每個選擇是事件源的兄弟姐妹。如果我的假設是正確的,你可以爲循環做這樣的事情在你的內心,而不是建立一個龐大的HTML字符串:

$('<option>blah blah</option>').appendTo(theSelect); 
+0

非常非常感謝!這正是我所期待的。感謝也擔心,但在我的情況下,這將工作。再次感謝! – Harris 2009-09-27 01:59:46

1

爲什麼不把$(this).siblings("[name=logic[]]").html(options);行內回調本身?在for循環完成後,最好的地方似乎是緊接着。

$("select[name=field[]]") 
    .live 
    (
    "change", 
    function() { 
     var selectElem = $(this); 
     $.getJSON 
     (
     "/json.php", 
     {id: $(this).val(), ajax: 'true'}, 
     function(j) { 
      options = ''; 
      for (var i = 0; i < j.length; i++) { 
      options += '<option value="' + 
         j[i].optionValue + '">' + 
         j[i].optionDisplay + 
         '</option>'; 
      } 

      selectElem.siblings("[name=logic[]]").html(options); 
     } 
    ); 
    } 
); 

編輯:加替代碼。

+0

這將使$(本)空,這意味着我無法找到的兄弟它。 – Harris 2009-09-27 01:50:46

+0

是的,這是你得到它的唯一方法,試試David的解決方案。你的代碼幾乎和我在我的jQuery腳本中一樣,除了我在回調中執行所有內容。 – jakeisonline 2009-09-27 01:52:42

+0

@哈里斯:我已經用代碼示例更新了答案。你是對的,這個關鍵字將不再引用select元素。查看selectElem變量以及如何在getJSON回調中使用它。 – 2009-09-27 01:59:14

0

JQuery與ajax有一些問題,主要是當你想要「只有當請求完成時」才觸發函數。發佈,獲取,生活等等,都有這些問題。唯一可以正常工作的是全球$ .ajax,我建議您使用。