2011-03-27 32 views
0

請看$ .get()。我需要使用變量nextId在隨後的$。員額(),但有被未定義的$獲得()範圍之外

$('#addbtn').click(function(){ 

    var insname = $('#ins').val(); 
    var itemexist = false; 

    $.each($('#selname option'), function(key, value){ 
     if($(this).text() == $.trim(insname)){ 
      itemexist = true; 
      alert("Item already exists: "+$(this).text()); 
     } 
    }); 

    if(insname=='') alert("Cannot be empty"); 

    if(!itemexist && insname!='') { 

     $.get('data1.php', 

      function(retId){ 
       var nextId = retId; 
       var incrementlength = 1; 
       incrementlength+= $('#selname option').length; 

       $('#selname').attr('size',incrementlength); 
       $('#selname') 
        .append($('<option></option>') 
        .attr('value', nextId).text(insname)); 
       $('#ins').val(''); 
      }); 

     alert(nextId);//nextId is not defined 
     $.post('data1_1.php', {id: nextId, name: insname},); 
    } 
}); 

感謝

回答

3

這裏會發生什麼事是,nextId是異步回調過程中設置完成所有的工作,所以,當你打電話報警, nextId未定義,因爲它尚未設置。如果您想使用$.post()中的返回nextId,則必須在$.get()回撥完成後致電$.post()。如下修改代碼,它應該工作:

試試這個:

$('#addbtn').click(function(){ 

    var insname = $('#ins').val(); 
    var itemexist = false; 

    $.each($('#selname option'), function(key, value){ 

     if($(this).text() == $.trim(insname)){ 
      itemexist = true; 
      alert("Item already exists: "+$(this).text()); 
     } 
     }); 

     if(insname=='') alert("Cannot be empty"); 
     if(!itemexist && insname!=''){ 
     $.get('data1.php', 
       function(retId){ 
        var nextId = retId; 
      var incrementlength = 1; 
      incrementlength+= $('#selname option').length; 
      $('#selname').attr('size',incrementlength); 
      $('#selname').append($('<option></option>').attr('value', nextId).text(insname)); 
      $('#ins').val(''); 
      alert(nextId);//nextId should be defined 
      $.post('data1_1.php', 
        {id: nextId, name: insname}, 
        ); 
      } 
     }); 


}); 
+0

是的,在stackoverflow的答案,這意味着對OP幾乎總是沒有想到贏,大聲笑 – zerkms 2011-03-27 08:04:39

+2

呃...我是新的貢獻SO。我以前主要是閱讀和離開類型。我沒有意識到任何要求答案應該使提問者思考的任何要求。我只是提供了最好的(IMO)答案。 – asleepysamurai 2011-03-27 08:07:54

+0

@asleepysamurai:當然,沒有什麼個人的;-)但是1)你在第一次嘗試時給出了錯誤的結果2)作爲副詞說:「給一個人一條魚,你今天喂他,教一個人去釣魚;你已經餵了他一輩子「 – zerkms 2011-03-27 08:09:30

4

這是因爲$.get異步執行問題(這就是AAJAX指)

您可以:

  1. 更改$.get$.ajax並使其同步與async: false選項
  2. (首選)要$.get回調
+0

感謝reply.I在想你的號碼2(首選)reply.how的,我會做,我用$。獲取max(id)並將其與輸入文本一起使用以附加到選擇列表。我試圖使用$ .post存儲密鑰/值到數據庫。再次感謝您的幫助。 – eddy 2011-03-27 09:11:50

+0

@eddy:#2是在他的回答中確切地提出了@asleepysamurai。 – zerkms 2011-03-27 09:16:11

+0

我的錯誤..我沒有注意到它是由sleepysamurai修訂。我學習做我從未想過$ .get和$ .post可以嵌套。我正在努力解決如何在一個$ .get中填充所有內容,就像在你的回覆中一樣。再次感謝 – eddy 2011-03-27 09:51:13