JQuery на responseXML в Firefox Ext - PullRequest
       9

JQuery на responseXML в Firefox Ext

0 голосов
/ 07 ноября 2010

Я пытаюсь разрешить jQuery 1.4.2 работать с переменной responseXML, но это не так ... Я могу позволить ему работать только с отображаемой живой страницей.Вот мой код:

var url = myext.baseuri + "/Common/page.asp";
   var httpRequest = myext.createHttpRequest();

   httpRequest.open('GET', url, false);
   httpRequest.send();
   if (httpRequest.status == 200) {

      $h = function(selector,context){ return new jQuery.fn.init(selector,context||httpRequest.responseXML); };

      Firebug.Console.log($h().find("select#id").html());
      Firebug.Console.log($h(httpRequest.responseXML));
      Firebug.Console.log($h(httpRequest.responseXML).html());

   } else {
      Firebug.Console.warn("status "+ httpRequest.status);
   }

Я вижу следующие результаты в консоли Firebug:

  • Null
  • jQuery (Document)
  • Null

Я не понимаю, как я должен использовать jQuery в этом случае ... почему первая строка возвращает Null?Мне действительно нужна помощь ...

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 ноября 2010

Вот пример того, над чем я работаю:

var req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
                             .createInstance(Components.interfaces.nsIXMLHttpRequest);
req.onload = function(){
    var xml = req.responseXML;
    $xml = function(selector){ return new jQuery.fn.init(selector,xml); };
    Firebug.Console.log($xml("schedule[order='1'] item"));
};
req.open("GET", url, true);
req.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;
req.send(null);

И консоль Firebug: [item, item, item, item]

Вот пример XML, над которым я работаю:1007 *

<?xml version="1.0" encoding="UTF-8"?>
<ratp>
    <schedules>
        <schedule order="1">
            <title><![CDATA[Prochains passages en temps réel]]></title>
            <liste>
                <item order="1">
                    <texte1><![CDATA[Voltaire-Villiers]]></texte1>
                    <texte2><![CDATA[11 mn]]></texte2>
                    <texte3><![CDATA[]]>
                    </texte3>
                </item>
                <item order="2">
                    <texte1><![CDATA[Voltaire-Villiers]]></texte1>
                    <texte2><![CDATA[30 mn]]></texte2>
                    <texte3><![CDATA[]]>
                    </texte3>
                </item>
                <item order="3">
                    <texte1><![CDATA[Place Jean Poulmarch]]></texte1>
                    <texte2><![CDATA[4 mn]]></texte2>
                    <texte3><![CDATA[]]>
                    </texte3>
                </item>
                <item order="4">
                    <texte1><![CDATA[Place Jean Poulmarch]]></texte1>
                    <texte2><![CDATA[24 mn]]></texte2>
                    <texte3><![CDATA[]]>
                    </texte3>
                </item>
            </liste>
        </schedule>
    </schedules>
</ratp>

Надеюсь, что это поможет!

0 голосов
/ 07 ноября 2010

Вы не должны использовать html () в документах XML, как это указано в документации jQuery: http://docs.jquery.com/Html.

Если вы хотите получить текст, содержащийся в элементе «select # id», выследует попробовать

Firebug.Console.log($h("select#id").text());

, так как функция text () может использоваться в документах XML (см. документацию jQuery).

Если вы хотите получить другой элемент вашего ответа XML, вы можете получитьэто так:

Firebug.Console.log($h("tagName1 tagName2 tagName3"));

Я не пытался получить элементы по Id, как вы пытались с помощью "#id", но я думаю, что он может не поддерживаться jQuery для XML-документа, как он вызывает "document.getElementById ()».Вместо этого вы можете попробовать:

Firebug.Console.log($h("select[id='id']"));

У вас не будет такой же производительности с этим методом, но он может работать!

...