2011-04-26 70 views
0

我對ajax不熟悉,我在學習過程中,但據我所知,它利用javascript來訪問DOM,所以我的問題是,是否可以放置一個參數在一個函數裏面?AJAX函數(這個)

<script type="text/javascript"> 
function loadXMLDoc(* * this * *) { 
    var xmlhttp; 
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
    } else { // code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.open("GET", "" 
    test.php ? access = "**+this**", false); 
    xmlhttp.send(); 
    document.getElementById("myDiv").innerHTML = xmlhttp.responseText; 
} 
</script> 

不應該這樣做嗎?

非常感謝您的幫助。

+0

除非你是在學習這個練習,否則我建議使用健壯的javascript庫(例如Dojo,jQuery)。它們提供了一種抽象瀏覽器差異並提供更清晰的調用接口的Ajax功能。 – ewh 2011-04-27 03:21:57

回答

0

this JS根據您正在運行的上下文進行更改。根據您的調用方式,它會發生變化。

閱讀這篇文章,以瞭解更多信息:http://www.quirksmode.org/js/this.html

xmlhttp.open("GET",""test.php?access="**+this**",false); 

此調用將沒有多大意義,因爲this所指的對象,但你實際上試圖做的是字符串連接(添加兩個字符串一起)。

如果您需要進行可變調用,請使用變量而不是this關鍵字。

function loadXMLDoc(accessVar) { 
    .... 
    xmlhttp.open("GET","test.php?access=" +accessVar ,false); 
} 

loadXMLDoc('accessIdentifier'); //passes the value 'accessIdentifier' to your method so it is passed along in the querystring. 
0

你很近。它看起來像你使用w3schools的例子。被警告,該網站並不總是最可靠的來源。有關更多信息,請參見http://w3fools.com/

查看他們的代碼再次,因爲它是從他們的網頁採取:

var xmlhttp; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","ajax_info.txt",true); 
xmlhttp.send(); 

正如你所看到的,「成功」的代碼位於onreadystatechange事件處理程序中。你的示例代碼有三個問題:一個是你傳遞變量的方式,兩個是你使用this的方式,三個是你的響應處理程序不能按預期工作。

var xmlhttp; 
var var1 = 'testdata'; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    handleAjaxResponse(responseText); 
    } 
xmlhttp.open("GET","ajax_info.php?var1="+var1,true); 
xmlhttp.send(); 

function handleAjaxResponse(resp) { 
    document.getElementById("myDiv").innerHTML=resp; 
} 

this而言,它是指執行的當前範圍,一個不同的主題完全。這不是你通過AJAX傳遞的變量。

+0

Chris,但在代碼中,我無法定義我的變量,通過使用loadXMLDoc(變量),因爲在代碼中,var1變量被定義爲inicialy,我需要通過在body上使用它來使其變得不穩定,如onClick = 「loadXMLDoc(變量)」; ...你明白我了嗎?我爲生鏽的英國人感到抱歉。 – Souza 2011-04-26 17:05:49