2012-03-01 4 views
0

初めてAJAXを使用しようとしていますが、難しい状況に陥っています。ここで要求コードは次のとおりです。AJAXがnullを返すXML

function requestData(j) { 
    var xmlhttp; 
     if (window.XMLHttpRequest) { 
      xmlhttp=new XMLHttpRequest(); 
     } 
     xmlhttp.onreadystatechange = function() { 
       if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
        xml = xmlhttp.responseXML; 
        post = ""; 
        title = ""; 
        postdata = xml.getElementsByTagName("post"); 
        titledata = xml.getElementsByTagName("title"); 
        datedata = xml.getElementsByTagName("date"); 
        timedata = xml.getElementsByTagName("time"); 
        document.getElementById("post").value = postdata[0].childNodes[0].nodeValue; 
        document.getElementById("heading").value = titledata[0].childNodes[0].nodeValue; 
        document.getElementById("date").value = datedata[0].childNodes[0].nodeValue; 
        document.getElementById("time").value = timedata[0].childNodes[0].nodeValue; 
        document.getElementById("id").value = j; 
        document.getElementById("update").value = "true"; 
       } 
      }; 
     xmlhttp.open("POST","../script/getnewsdata.php",true); 
     xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
     xmlhttp.send("ID=" + j); 
     return false; 
    } 

Firebugのは、ラインPOSTDATA = xml.getElementsByTagName(「ポスト」)の「XMLがnullである」ことを私に語っています。つまり、xmlhttp.responseXMLはnullです。

これは、サーバー側のスクリプトです:

<?php 
$db = mysql_connect("wadafw","awfawf","awfsgv"); 
if(!$db) 
{ 
    die("Could not connect: " . mysql_error()); 
} 
mysql_select_db("afggbare", $db); 
$updata = mysql_query('SELECT * FROM News WHERE NewsID='.$_POST['ID']); 
$blog = mysql_fetch_array($updata); 
$post = $blog['Content']; 
$regex = Array('/<br />/', '/<(\/?)(b|i|u)>/', '/<a href="(http://[www.]?\w+)">(\w+)<\/a>/', '/<div class="media"><iframe title="YouTube video player" width="425" height="265" src="http://www.youtube.com/embed/(\w+)hd=1" frameborder="0" allowfullscreen></iframe></div>/', '/<div class="media"><img width="425" src="(http://[www.]?[\w+])" /></div>/'); 
$regReplace = Array('\r\n', '[$1$2]', '[link=$1]$2[/link]', '[youtube]http://www.youtube.com/watch?v=$1[/youtube]', 
       '[img]$1[/img]'); 
$post = preg_replace($regex, $regReplace, $post); 

echo '<newsItem> 
     <title>'.$blog['Heading'].'</title> 
     <post>'.$post.'</post> 
     <date>'.$blog['time'].'</date> 
     <time>'.$blog['time'].'</time> 
    </newsItem>'; 
?> 

正規表現は、おそらく悪いです...しかし、それは今重要ではありません。

が...これに変更され、現在取得エラー "機能が定義されていません":

オーケー
function requestData(j) { 
     $.ajax("../script/getnewsdata.php", { 
      data: {ID: j}, 
      type: "POST", 
      dataType: "xml", 
      success: function(data, status, jqXHR){ 
       var xml = jqXHR.responseXML; 
       postdata = xml.getElementsByTagName("post"); 
       titledata = xml.getElementsByTagName("title"); 
       datedata = xml.getElementsByTagName("date"); 
       timedata = xml.getElementsByTagName("time"); 
       document.getElementById("post").value = postdata[0].childNodes[0].nodeValue; 
       document.getElementById("heading").value = titledata[0].childNodes[0].nodeValue; 
       document.getElementById("date").value = datedata[0].childNodes[0].nodeValue; 
       document.getElementById("time").value = timedata[0].childNodes[0].nodeValue; 
       document.getElementById("id").value = j; 
       document.getElementById("update").value = "true"; 
      } 


     } 
    } 

は、その問題を発見しました。それはちょうどタイプミスです... $ .ajax()パラメータの括弧を閉じていませんでした。今私はエラーを取得していません。しかし、それだけで何もしません...

+0

の '' ? –

+0

申し訳ありませんが、忘れました。それは今だが、私は同じ問題を抱えている。 – Luke

答えて

2

AJAXをゼロから実行しようとするのではなく、既存のライブラリを使用することをお勧めします。 jQueryはこの作業を非常に簡単にします。

http://api.jquery.com/jQuery.ajax/

function requestData(j) { 
    $.ajax('../script/getnewsdata.php', { 
     data: {ID: j}, 
     type: 'POST', 
     dataType: 'xml', 
     success: function(data, status, jqXHR){ 
      // consume data here 
     } 
    }); 
} 
+0

彼はそれのためのプラグインを使用する必要があります。 – lolo

+0

jQueryは物事を簡単にするかもしれませんが、jQueryを最初に学ばなければなりません。それに時間がありません。 – Luke

+1

このアプローチをお勧めします。 XHRオブジェクトが一貫して使用できないため、外部ライブラリを使用するだけです。 – Christian

0

このように気にいらを見て、その必要性は:

var xmlhttp; 
if (window.XMLHttpRequest) 
    xmlhttp=new XMLHttpRequest(); 
else 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 

xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     document.getElementById("my").innerHTML=xmlhttp.responseText; 
} 
xmlhttp.open("POST","page.php,true); 
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
xmlhttp.send("firstname=lolo&lastname=koko"); 
+0

私は混乱しています。私はXMLHttpRequestがonreadystatechangeイベントを発生させたときに、xmhttpでリクエストを送信してからxmlをxmlhttp.responseXMLとして定義しています... または、少なくとも私はそれが起こっていると思います。 – Luke

+0

>>>>私の編集を参照してください – lolo

+0

それは基本的に私が使っていた正確なコードです...私は同じ場所... w3schools.comからそれを得たと思います。 ありがとうございますが、私はjQueryを使用します。 – Luke

関連する問題