2016-04-26 4 views
0

私が取り組んでいる小さなコードに助けを求めています。 しかし、私はAJAXとJqueryでうまくいきません。だから私の話題は:外部XMLファイル(ここではtext.xml)を使ってXMLを取得し、それをDavid WalshのコードでJSONオブジェクトに解析したかったのです(ここにソース:https://davidwalsh.name/convert-xml-json)。 それから、誰かがその機能が「成功」の部分にしかないと言いました。その理由は、私がその上で私のすべての機能を実行しているからです。 私の目標は、XMLをJSONオブジェクトに入れて、扱いやすいようにすることです。私の質問に答えるフォーラムのトピックがいくつか見つかりますが、コードは機能しません。ありがとうございました。 私のコードがあります:AJAXを使用してXMLを取得し、それをJSON(サーバーなし)に解析します

<HTML> 

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>testSelection</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script> 
</head> 

<body> 

    <body> 
     <div id="Div_XML"></div> 
    </body> 

    <script> 
     var xml = $.parseXML('<bds> <serie1 id="1"> <desc> <num> 2 </num><title>we are on 1 </title><commen>HI </commen><URL>Idk</URL></desc><desc><num> 1 </num><title>we are on 2 </title><commen>Hello world </commen><URL>Baptiste</URL></desc></serie1></bds>') 
     var results = new Array; 
     var obj = {}; 


     $(document).ready(
       function() { 
        $.ajax({ 
          type: "GET", 
          url: "text.xml", 
          dataType: "xml", 
          success: function(xml) { 

           var commen = $(this).find('commen').text(); 
           var title = $(this).find('title').text(); 
           var URL = $(this).find('URL').text(); 
           var num = $(this).find('num').text(); 

           $(xml).find('bds').each(

            function() { 
             results.push({ 
              id: $(this).attr('id'), 
              num: num, 
              commen: commen, 
              title: title, 
              URL: URL}); 
             }); 
             // Changes XML to JSON 


              // Create the return object 
             function parseX(results){  

              if (results.nodeType == 1) { // element 
               // do attributes 
               if (results.attributes.length > 0) { 
                obj["@attributes"] = {}; 
                for (var j = 0; j < results.attributes.length; j++) { 
                 var attribute = results.attributes.item(j); 
                 obj["@attributes"][attribute.nodeName] = attribute.nodeValue; 
                } 
               } 
              } else if (results.nodeType == 3) { // text 
               obj = results.nodeValue; 
              } 

              // do children 
              if (results.hasChildNodes()) { 
               for (var i = 0; i < results.childNodes.length; i++) { 
                var item = results.childNodes.item(i); 
                var nodeName = item.nodeName; 
                if (typeof(obj[nodeName]) == "undefined") { 
                 obj[nodeName] = xmlToJson(item); 
                } else { 
                 if (typeof(obj[nodeName].push) == "undefined") { 
                  var old = obj[nodeName]; 
                  obj[nodeName] = []; 
                  obj[nodeName].push(old); 

                 } 
                 obj[nodeName].push(xmlToJson(item)); 
                } 
               } 
              } 



             // Assuming xmlDoc is the XML DOM Document 
             var jsonText = JSON.stringify(xmlToJson(results)); 
             alert(jsonText); 
             } 
             } 
            ) 
           }; 
          } 
         } 
        ) 
    </script> 
</body> 

</HTML> 

だから私の考えはその後、JSONにそれを解析し、配列に私のxmlデータのすべてをプッシュすることでした。 質問があります:

  • - あなたはDavid Walshのコードに配列を付けましたか?
  • - AJAXの成功部分に複数の機能を追加できますか?
  • - 私のJSONオブジェクトはシリーズで分割できますか? (私はserie1、serie2、serie3が表示された直後にxmlを与えます)
  • - 数値(Jsonオブジェクト)と数値を比較しますか?私は、テストを行うためにVARのXMLを使用していた

私の初心者の質問のため申し訳ありません...

そしてtext.xml

<?xml version="1.0" encoding="iso-8859-1"?> 
<bds> 
     <serie1 id="1"> 
       <desc> 
         <num> 1 </num> 
         <title>nous sommes sur le lien 1 </title> 
         <commen>Hello </commen> 
         <URL>Baptiste</URL> 
       </desc> 
       <desc> 
         <num> 2 </num> 
         <title>nous sommes sur le lien 2 </title> 
         <commen>HI </commen> 
         <URL>Baptiste</URL> 
       </desc> 
       <desc> 
         <num> 3 </num> 
         <title>nous sommes sur le lien 3 </title> 
         <commen>How are you </commen> 
         <URL>Gars inconnu</URL> 
       </desc> 
       <desc> 
         <num> 4 </num> 
         <title>nous sommes sur le lien 4 </title> 
         <commen>Idk </commen> 
         <URL>Raymond</URL> 
       </desc> 
       <desc> 
         <num> 5 </num> 
         <title>nous sommes sur le lien 5 </title> 
         <commen>Thank you </commen> 
         <URL>Eric</URL> 
       </desc> 
       <desc> 
         <num> 6 </num> 
         <title>nous sommes sur le lien 6 </title> 
         <commen>You're welcome </commen> 
         <URL>Baptiste</URL> 
       </desc> 
       <desc> 
         <num> 7 </num> 
         <title>nous sommes sur le lien 7 </title> 
         <commen>Sorry </commen> 
         <URL>Céline</URL> 
       </desc> 
     </serie1> 
      <serie2 id="2"> 
       <desc> 
         <num> 1 </num> 
         <title>nous sommes sur le lien 1 </title> 
         <commen>Hello </commen> 
         <URL>Baptiste</URL> 
       </desc> 
       <desc> 
         <num> 2 </num> 
         <title>nous sommes sur le lien 2 </title> 
         <commen>HI </commen> 
         <URL>Baptiste</URL> 
       </desc> 
       <desc> 
         <num> 3 </num> 
         <title>nous sommes sur le lien 3 </title> 
         <commen>How are you </commen> 
         <URL>Gars inconnu</URL> 
       </desc> 
       <desc> 
         <num> 4 </num> 
         <title>nous sommes sur le lien 4 </title> 
         <commen>Idk </commen> 
         <URL>Raymond</URL> 
       </desc> 
       <desc> 
         <num> 5 </num> 
         <title>nous sommes sur le lien 5 </title> 
         <commen>Thank you </commen> 
         <URL>Eric</URL> 
       </desc> 
       <desc> 
         <num> 6 </num> 
         <title>nous sommes sur le lien 6 </title> 
         <commen>You're welcome </commen> 
         <URL>Baptiste</URL> 
       </desc> 
       <desc> 
         <num> 7 </num> 
         <title>nous sommes sur le lien 7 </title> 
         <commen>Sorry </commen> 
         <URL>Céline</URL> 
       </desc> 
     </serie2> 
      <serie3 id="3"> 
       <desc> 
         <num> 1 </num> 
         <title>nous sommes sur le lien 1 </title> 
         <commen>Hello </commen> 
         <URL>Baptiste</URL> 
       </desc> 
       <desc> 
         <num> 2 </num> 
         <title>nous sommes sur le lien 2 </title> 
         <commen>HI </commen> 
         <URL>Baptiste</URL> 
       </desc> 
       <desc> 
         <num> 3 </num> 
         <title>nous sommes sur le lien 3 </title> 
         <commen>How are you </commen> 
         <URL>Gars inconnu</URL> 
       </desc> 
       <desc> 
         <num> 4 </num> 
         <title>nous sommes sur le lien 4 </title> 
         <commen>Idk </commen> 
         <URL>Raymond</URL> 
       </desc> 
       <desc> 
         <num> 5 </num> 
         <title>nous sommes sur le lien 5 </title> 
         <commen>Thank you </commen> 
         <URL>Eric</URL> 
       </desc> 
       <desc> 
         <num> 6 </num> 
         <title>nous sommes sur le lien 6 </title> 
         <commen>You're welcome </commen> 
         <URL>Baptiste</URL> 
       </desc> 
       <desc> 
         <num> 7 </num> 
         <title>nous sommes sur le lien 7 </title> 
         <commen>Sorry </commen> 
         <URL>Céline</URL> 
       </desc> 
     </serie3> 
</bds> 

(exemple用text.num == 1のように)ローカルでは動作しますが、ファイルからXMLを取得する必要があるときは、私は完全に失われています。 それから、私は、後で私のプロジェクトに書き込むために、JSONで使用することはできません。私はそれをJSONで書くことはできません。 ところで、私はXmlHTTPRequestとPHPを使用することはできませんそれを行うためのより良い、簡単な方法であることを知って... あなたは私の質問への答えを持っていて、読んでいただきありがとうと思います。

+0

'parseX(results)'関数の定義は 'success'関数の外になければなりません。あなたが好きな場所で' parseX'関数を呼び出すことができ、作成した 'result object'の代わりにパスXMLオブジェクトが必要です。 – Srinu

+0

私は成功部分に関数parseXを追加する必要がありますか?私は、それから配列の結果を与えます。私は – Jigghart

+0

あなたに感謝しようとするたびに、私はSyntaxError:missing)引数リストの後に言った。そのエラーをデバッグするために私が何をすることができますか? – Jigghart

答えて

0

だから私は代わりにこれを使用し、ダウンAJAXをしてみましょう。ここ

// File: readXML.js 

var i; 
var LinkNum = new Array; 
var LinkCommen = new Array ; 
var LinkURL = new Array; 
var LinkTitle = new Array; 
var tab = new Array; 

$(document).ready(function(){ 

    // Open the students.xml file 
    $.get("text.xml",{},function(xml){ 

     // Build an HTML string 
     myHTMLOutput = ''; 
     myHTMLOutput += '<table width="98%" border="1" cellpadding="0" cellspacing="0">'; 
     myHTMLOutput += '<th>LinkTitle</th><th>LinkCommen</th><th>LinkURL</th><th>LinkNum</th>'; 

     // Run the function for each student tag in the XML file 

     $('bds',xml).each(function() { 

      $(this).children().each(function(){ 

       $(this).children().each(function() { 

        LinkNum.push($(this).children("num").text()); 
        LinkCommen.push($(this).children("commen").text()); 
        LinkURL.push($(this).children("URL").text()); 
        LinkTitle.push($(this).children("title").text()); 

       }); 


      }); 

      // Build row HTML data and store in string 
       mydata = BuildStudentHTML(LinkNum,LinkCommen,LinkURL,LinkTitle); 
       myHTMLOutput = myHTMLOutput + mydata; 
     }); 
     myHTMLOutput += '</table>'; 

     // Update the DIV called Content Area with the HTML string 
     $("#ContentArea").append(myHTMLOutput); 
    }); 
}); 



function BuildStudentHTML(LinkNum,LinkCommen,LinkURL,LinkTitle){ 

    // Check to see if their is a "post" attribute in the name field 
    // Build HTML string and return 
    for (i=0;i<10;i++) 
    { 
    if (LinkNum[i]==6) 
    { 
    output = ''; 
    output += '<tr>'; 
    output += '<td>'+ LinkTitle[i] +'</td>'; 
    output += '<td>'+ LinkCommen[i] +'</td>'; 
    output += '<td>'+ LinkURL[i] +'</td>'; 
    output += '<td>'+ LinkNum[i] +'</td>'; 
    output += '</tr>'; 
     return output; 
    } 

    } 
} 

出典:http://www.compoc.com/tuts/

をだから、基本的に、私は今のために、アレイに私のノードを返す私は2番目を取るために少し問題を抱えて私のXMLの3番目のセリですが、私は自分のXMLに書いたものを取り出しました。 PS:私はちょうどテストのために関数LinkNum == 6で使っていますが、私はちょうどそれらを後で扱うために別の配列でそれらを解析しました。

関連する問題