2011-04-26 69 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