2017-09-09 16 views
0

私は自分の仕事のために少し物を作っています。他のデータベースとの間でニュースアイテムを保持するためのファイルのうちの1つはXMLです。なぜ私は実際のデータベースを使用しないのですか?変化する可能性のある仕事方針の理由。PHPから生成された 'getElementsByTagName'はPHPで生成された

しかし、今の私は、次のadmin.phpを生成:

<div id="news" style="display:none;"> 
    <div style="float:left;width:40%;"> 
    <h1>Regionala Nyheter</h1> 
    <table border="0"><tr><td><b>Rubrik: </b></td><td><input id="rntitle" type="text" /></p></td></tr> 
    <tr><td></td><td><textarea id="rntext" rows=10 cols=40></textarea></td></tr> 
    <tr><td></td><td><input type="button" value="Spara" onclick="editnews(0,-2)" /></td></tr></table> 
    <div id="regnews"></div> 
    </div> 
</div> 

...

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
<script> 
    var rnxhttp = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHTTP"); 
    var RNDoc; 
    var el_news; 
    var el_regnews; 
    var numrn = 0; 

    rnxhttp.onreadystatechange = function() 
    { 
     if (rnxhttp.readyState == 4 && rnxhttp.status == 200) 
     { 
      RNDoc = rnxhttp.responseXML; 
      refresh_regnews(); 
     } 
    }; 

    onload = function() 
    { 
     el_regnews = document.getElementById("regnews"); 
     el_news = document.getElementById("news"); 
     el_news.style.display = "block"; 
     rnxhttp.open("GET", "regnews.xml", true); 
     rnxhttp.send(); 
    } 

    var refresh_regnews = function() 
    { 
     var inhtext = ""; 
>>  numrn = RNDoc.getElementsByTagName("entry").length; 
     for(var i=0; i<numrn; i++) 
     { 
      var entry = RNDoc.getElementsByTagName("entry")[i]; 
      var edate = entry.getElementsByTagName("date")[0].childNodes[0].nodeValue; 
      var etitle = entry.getElementsByTagName("title")[0].childNodes[0].nodeValue; 
      var etext = entry.getElementsByTagName("text")[0].childNodes[0].nodeValue.split("\n"); 
      inhtext = inhtext + "<br /><br /><div style='width:90%;border-style:ridge;'>" 
      inhtext = inhtext + "<table border='0'><tr><td><b>Rubrik: </b></td><td colspan='2'><input id='cntitle" + i + "' type='text' value='" + etitle + "' /></p></td></tr>"; 
      inhtext = inhtext + "<tr><td></td><td colspan='2'><textarea id='cntext' rows=10 cols=40>"; 
      for(var j=1; j<etext.length; j++) 
       inhtext = inhtext + etext[j].trim() + "\n"; 
      inhtext = inhtext + "</textarea></td></tr><tr><td></td>" 
      inhtext = inhtext + "<td><input type='button' value='Spara' onclick='editnews(0," + i + ")' /></td><td><input type='button' value='Radera' /></td></tr></table></div>"; 
     } 
     el_regnews.innerHTML = inhtext; 
    } 

    var editnews = function(newstype,newsindex) 
    { 
     var newstitle = ""; 
     var newstext = ""; 
     if(newstype==0) 
     { 
      if(newsindex<0) 
      { 
       newstitle = document.getElementById("rntitle").value; 
       newstext = document.getElementById("rntext").value; 
      } 
      else 
      { 
       newstitle = document.getElementById("rntitle" + newsindex).value; 
       newstext = document.getElementById("rntext" + newsindex).value; 
      } 
     } 
     $.ajax({ 
      type: "POST", 
      url: "submit.php", 
      data:{ add: 1, type: newstype, index: newsindex, title: newstitle, text: newstext }, 
      success: function(data){ 
       console.log(data); 
       console.log(ajax.responseText); 
      } 
     }); 
    } 
</script> 

>>エラーが発生したショー。エラーは次のとおりです。

Uncaught TypeError: Cannot read property 'getElementsByTagName' of null 
    at refresh_regnews (admin.php:106) 
    at XMLHttpRequest.rnxhttp.onreadystatechange (admin.php:68) 

これはかなり欠けていますが、私はできるだけ多くの本質を与えています。 submit.phpには何かがあります(また、サーバーが新しいファイルの作成を許可しているかどうかわからない)ように、私はregnews.xmlファイルをヘッダーと "ルートタグ"をあらかじめ作成しています。いくつかの提出後

regnews.xmlは次のようになります。

だから、
<?xml version="1.0" encoding="UTF-8"?> 
<newsitems> 
    <entry> 
     <date>2017/09/04 - 19:45:32</date> 
     <title>Säkerheten Först</title> 
     <text> 
      Vi tar säkerheten på största alvar! 
      &lt;img src="http://www.edwardleuf.org/gradiant.bmp" /&gt; 
     </text> 
    </entry> 
    <entry> 
     <date>2017/09/04 - 19:45:32</date> 
     <title>Säkerheten I Förhand</title> 
     <text> 
      Vi tar säkerheten på största alvar! 

     </text> 
    </entry> 
    <entry> 
     <date>2017/09/04 - 19:45:32</date> 
     <title>Kontainrarna Blockerade</title> 
     <text> 
      Och stacketet fick lida. &lt;i&gt;Eller kanske bilen själv?&lt;/i&gt; 
     </text> 
    </entry> 
    <entry> 
     <date>2017/09/09 - 12:55:16</date> 
     <title>Vi bygger nytt<title> 
     <text> 
      Varje dag bygger vi något nytt. 

      Man kan undra varför. 
     </text> 
    </entry> 
    <entry> 
     <date>2017/09/09 - 12:57:31</date> 
     <title>Vi bygger nytt<title> 
     <text> 
      Varje dag bygger vi något nytt. 

      Man kan undra varför. 
     </text> 
    </entry> 
    <entry> 
     <date>2017/09/09 - 12:57:46</date> 
     <title>Vi bygger nytt<title> 
     <text> 
      Varje dag bygger vi något nytt. 

      Man kan undra varför. 
     </text> 
    </entry> 
</newsitems> 

、すべてのことで、私はXMLHttpRequest()<entry>タグを見つけることができない理由を不思議に思う必要があります。それとも、コードのどこかに何か間違ったことがあるのでしょうか?面白いことに、テストするのはただ一つの<entry>だったので、うまくいきました。

Chromeでのみテストされています(LastPassはありません)。これは、どの作品が使用される可能性が高いためです。 responseXMLは完全に有効なXMLを必要とするため

+0

エラーメッセージが表示されますか? – jmargolisvt

+0

@jmargolisvtエラーは次のとおりです。 'キャッチされていないTypeError:プロパティ 'getElementsByTagName' of nullが読み取れません。 ' – Edward

+1

古典的な誤りです。可変的な同期方法にアクセスする。 – WaldemarIce

答えて

0

実際RNDocは、それがnullを返しnullです。 XMLを確認することを検討してください。まず、サーバーから送信された応答ヘッダーにContent-Typeが必要です。

+0

この 'Content-Type'はどこに置かれますか?私は 'header(" Content-type:text/xml ");'のように一番上の 'submit.php'に入れてみましたが、それは役に立たなかった(アプリケーションとテキスト)。 – Edward

+1

クライアントソフトウェアに何かを送る前の 'POST'メソッドで' header( "Content-type:text/xml");や 'header(" Content-type:application/xml ");ブラウザのWeb開発ツールからの応答 –

関連する問題