jsGears.com 技術論壇 - AJAX, JavaScript, jQuery, 網站開發, 前端效能優化's Archiver

bau720123 發表於 2009-3-23 20:17

請教AJAX參數接收問題

大家好
小弟不才要請教高手一些問題這是一段AJAX的函式--
其中num,num2,num3--真的是有抓到值了--這點是可以確定的
[code js]
function Buildkey(num,num2,num3)
{
  var requestString="abc.php?colorid="+num+"&styleid="+num2+"&level="+num3;
  xmlHttp.open('GET',requestString,true);
  xmlHttp.onreadystatechange=catchGetTime;
  xmlHttp.send(null);
}

function catchGetTime()
{

  if (xmlHttp.readyState==4 || xmlHttp.readyState=='complete')
  {
  
    if (xmlHttp.status == 200)
    {
      var result = xmlHttp.responseText;
      //現在idbau1是寫死的--我想讓num3(是數字的類型)黏在idbau的後面(動態接收後會是idbau1..2..3之類的)--可是我真的不知道要怎樣用語法來表示
      document.getElementById("idbau1").innerHTML=result;
    }
  
  }

}
[/code]
我自己測試過
document.getElementById("idbau1"+num3).innerHTML=result;
是不行的

wmh 發表於 2009-3-24 13:17

因為你的 num3 是在 Buildkey() 裡面,所以 catchGetTime 無法接收到。有幾種方式可以達到,例如把 num3 變成全域變數,不過不建議這樣做。另一種方式是把 num3 傳入 catchGetTime(),例如:

[code js]
xmlHttp.onreadystatechange = function(num3) {
  catchGetTime(num3);
};
[/code]

catchGetTime() 就可以接到這個值了...

bau720123 發表於 2009-3-24 16:47

照您這樣登打後
先將
xmlHttp.onreadystatechange=catchGetTime;
註解掉~並更換成
xmlHttp.onreadystatechange = function(num3)
{  
catchGetTime(num3);  
};


document.getElementById("idbau"+num3).innerHTML=result;
不變

結果在FF瀏覽器的錯誤主控台中出現了錯誤訊息
document.getElementById("idbau" + num3) is null
這是代表num3是null(可能我程式有錯而導致的錯誤嗎)(但num3是真的有值的)
還是說有其它映對的寫法呢

修改過後的寫法
[code js]
function Buildkey(num,num2,num3)
{
var requestString="order_input_querybau1.php?colorid="+num+"&styleid="+num2+"&level="+num3;
xmlHttp.open('GET',requestString,true);
//xmlHttp.onreadystatechange=catchGetTime;
xmlHttp.onreadystatechange = function(num3)
{  
catchGetTime(num3);  
};
xmlHttp.send(null);
}

function catchGetTime(num3)
{

if (xmlHttp.readyState==4 || xmlHttp.readyState=='complete')
{

  if (xmlHttp.status == 200)
  {
  var result = xmlHttp.responseText;
  document.getElementById('idbau'+num3).innerHTML=result;       
  }

}

}
[/code]

wmh 發表於 2009-3-24 17:01

sorry, 應該是我弄錯了, 試試看這樣:
[code js]
xmlHttp.onreadystatechange = function() {
  catchGetTime(num3);
};
[/code]

以上是用到了 JavaScript 的 closure 的特性,num3 可以透過那個 function 定義的上下文取得,而非用傳入的方式取得。

bau720123 發表於 2009-3-24 17:25

已經成功了
再次謝謝您的幫助
說真的我還真不知道closure是什麼意思
不過我會再努力的
再次感謝

頁: [1]

Powered by Discuz! Archiver  © 2001-2009 Comsenz Inc.