2012-02-14 9 views
2

私はコメントリストをロードしています。現在、自分のhtmlページにあるリストを新しい読み込み済みのリストに置き換えようとしています。無効なAjaxコンテンツ

以前のバージョンでは、リスト(単純なxml)を読み込み、その要素を反復してコンテンツを生成しました。 うまくいきましたが、要素を1つずつ繰り返して作成しなければならず、xmlはデバッグ以外は役に立たないものでした。

私はxmlページをhtml(スタンドアロン)またはxml(ajaxの必要性、つまりコアのもの)として表示できるように変更しようとしています。

// ajax call to populate the comments 
    $.ajax({ 
     type: 'GET', 
     url: 'flow/' + target, 
     dataType: 'xml', 
     success: function(xml){ 
       var list = $(xml).find('#flow'); 

       // var $list = $layer.find('#flow'); 
       // $list.children().remove(); 
       // we process it for events : 
       // --to implement-- 

       // we simply replace the list 
       $layer.find('#flow').replaceWith(list); 

       // update the scrollpane 
       updateScrollPane(); 
     }, 
     error: function(xhrq, status, code){ 
      formError('Could not load the comments.<br />Error with xhr : status=' + status + ', code=' + code); 
      // and we log it 
      log('Error with xhr : status=' + status + ', code=' + code); 
      updateScrollPane(); 
     } 
    }); 

しかし、問題は、それが正しく挿入されますが、それがブラウザでXMLとして考えられていますので、スタイリングが正しく動作しないということである。

は、私はそのようにそれを交換してください。すなわち、ここで

がロードされる可能リストである:

<?xml version="1.0"?> 
      <ul id="flow" path="2012/grammont" target="IMG_9610.JPG" valid="false"> 
<!-- no comment yet, be the first ! --> 
       <li class="no-comment" /> 
<!-- Log : 
New FlowDB(2012/grammont/flow.db, IMG_9610.JPG) 
--> 
      </ul> <!-- end of the real content --> 

私は私の問題は、それが誤ってXMLとしてのjQueryによって解釈されていることだと思います(私は$(XML).find(「#フロー」を使用しました)ので、DOM要素だけを取得し、xmlヘッダーを削除する必要があります。 Iが挿入取得一つは単純型要素(すなわち、ブラウザによって解釈されない)であるが

現在、正しいのli要素は、HTMLLIElementオブジェクトです。

ブラウザでHTMLを取得し、xmlの要素が混在していないことを確認するにはどうすればよいですか?

編集

私はXMLヘッダなしで簡単なHTMLを生成し、ノーdataTypeとまたはデータ型: 'HTML')でそれをロードしようとするので、私の、結果はさらに悪くなります現在のリストが削除され、何もそれを置き換えるために置かれていない...

+0

「dataType: 'text/html''を試してください。また、なぜターゲット、パス、および有効な属性を持っていますか? – Ktash

+0

要素の(子の)内容を置き換えるには、次のように変更します:$ layer.find( '#flow')。replaceWith(list); 〜$ layer.html(リスト); –

+0

はい、ここで問題となるのは、$ layerには#flowという要素が多くあり、#flowだけが置き換えられることです。 –

答えて

1

XML要素がDOMに挿入したとき、彼らは実際には空xmlns属性を運ぶ(HTML要素と同じではありませんので、ブラウザは彼らのように考慮されていますノード名が表示されていても同じ)。

あなたがHTMLデータを操作しているので、あなたはHTMLなどのマークアップをロードするためのjQueryを指示する必要があり、ないXML:

$.ajax({ 
    type: "GET", 
    url: "flow/" + target, 
    dataType: "html", 
    // ... 
}); 

そしておそらくHTML5のデータを使用するので、あなたがすることなく、あなたのマークアップで追加の情報を埋め込むことができる属性無効にする:

<ul id="flow" data-path="2012/grammont" 
    data-target="IMG_9610.JPG" data-valid="false"> 
+0

はい、ありがとうございます。 「xml」は問題だった。 そして、data- * html5属性についてはわかりませんでした。知っておきたいことです。 –

+0

私が正しく理解していれば、正しいヘッダーを持つxmlコンテンツの$(xml)はxmlドキュメントを返します。単純なhtmlコンテンツ(単一要素)の$(text)は要素を直接指します。それは正しい? –

+0

実際には、引数の内容によって異なります。単一の要素が 'document.createElement()'によって作成され、そのままラップされます。複雑なマークアップは 'document.createDocumentFragment()'によって作成され、結果のノードリストはjQueryオブジェクトにラップされます。 –

関連する問題