2011-04-26 13 views
0

私はAjaxをよく知っていませんが、学習中ですが、私が知る限り、javascriptを使用して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

学習の練習としてこれをやっていない限り、頑丈なjavascriptライブラリ(例:Dojo、jQuery)の使用をお勧めします。彼らは、ブラウザの違いを抽象化し、より洗練された呼び出しインタフェースを提供するajax機能を提供します。 – ewh

答えて

0

thisは、実行中のコンテキストに応じて変更されます。呼び方によっては変更されます。

詳細については、この記事を読む:http://www.quirksmode.org/js/this.html

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

この呼び出しはthisがオブジェクトを参照するので、あまり意味がないだろうが、あなたが実際に行うしようとしていることは2つの文字列を文字列連結(追加されます一緒に)。

変数呼び出しを行う必要がある場合は、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イベントハンドラ内に配置されています。あなたのコード例には、変数を渡す方法と2つの方法(this)と、3つの問題があります.3つは、応答ハンドラが期待どおりに動作しないことです。 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のように本体でvolatileを使用する必要があります。 "loadXMLDoc(variable)"; ...あなたは私を理解しましたか?私は錆びたエンリッシュには申し訳ない。 – Souza

関連する問題