2011-04-26 5 views
0

나는 아약스에 익숙하지 않다. 나는 배우는 중이다. 그러나 내가 아는 한, DOM에 액세스하기 위해 자바 스크립트를 사용한다. 그래서 나의 질문은 논쟁의 여지가있다. 함수 안에서?AJAX 함수 (this)

<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

학습에서 연습하지 않는 한 강력한 자바 스크립트 라이브러리 (예 : Dojo, jQuery)를 사용하는 것이 좋습니다. 그들은 브라우저 차이를 추상화하고 훨씬 깨끗한 호출 인터페이스를 제공하는 아약스 기능을 제공합니다. – ewh

답변

0

this JS에서 실행중인 컨텍스트에 따라 변경됩니다. 호출 방식에 따라 JS가 변경됩니다.

자세한 내용은이 문서 읽기 : http://www.quirksmode.org/js/this.html

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

이 호출이 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을 사용하는 방식이고 다른 하나는 응답 처리기가 예상대로 작동하지 않는 것입니다. 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; 
} 

, 그것은 현재 실행 범위 완전히 다른 피사체를 말한다. 그것은 AJAX를 통해 전달할 변수가 아닙니다.

+0

코드에서, var1 변수가 inicialy로 정의 되었기 때문에 loadXMLDoc (변수)를 사용하여 내 변수를 정의 할 수 없습니다. onClick과 같은 본문에서이 변수를 사용하여 휘발성으로 만들 필요가 있습니다. "loadXMLDoc (변수)"; 너 나를 이해 했니? 내 녹슨 engrish 미안 해요. – Souza