奇怪的jQuery AJAX行为:XML作为#document返回,而不是对象

时间:2012-04-17 09:29:04

标签: jquery xml ajax

我遇到了jQuery的问题,尝试获取XML文档,它在控制台中以#document的形式返回,而不是我可以操作的对象。这是为什么?

这是我的JavaScript代码:

$.get('/ingredients/view_xml/' + ingredientId, function(xml) {
    console.log(xml);
}, 'xml');

这是XML:

<?xml version="1.0" encoding="UTF-8" ?>
<ingredient>
    <entryId>700</entryId>
    <title>GUINEA FOWL WHOLE FRESH X 1.5KG</title>
    <ingredientUnit>KG</ingredientUnit>
    <ingredientCost>5.03</ingredientCost>
</ingredient>

任何帮助都会非常感激,即使这是我犯过的n00b错误,现在也看不到!

2 个答案:

答案 0 :(得分:3)

这是预期的行为,请参阅documentation

  

<强>的dataType
  默认值:智能猜测(xml,json,script或html)

     

您期望从服务器返回的数据类型。   如果没有指定,jQuery将尝试根据它推断它   响应的MIME类型(XML MIME类型将生成XML,in   1.4 JSON将产生一个JavaScript对象,在1.4脚本中会   执行脚本,其他任何东西都将作为一个返回   串)。可用的类型(结果作为第一个传递   成功回调的论据是:

     

“xml”:返回可以通过jQuery处理的XML文档   [...]

此外,使用jQuery.parseXML()解析文档,{{3}}只是浏览器“本机”XML解析的包装器。可以使用DOM遍历和操作生成的文档,或者更方便地使用jQuery。 doc:

中的示例
var xml = "<rss version='2.0'><channel><title>RSS Title</title></channel></rss>",
    xmlDoc = $.parseXML( xml ),
    $xml = $( xmlDoc ),
    $title = $xml.find( "title" );

/* append "RSS Title" to #someElement */
$( "#someElement" ).append( $title.text() );
// ...

答案 1 :(得分:1)

我认为这是因为它是一个文档(它由$.parseXML()解析,如果你设置了正确的标题,则会返回一个文档),如果你想在它上面使用jQuery方法,你应该将它包装在jQuery中

$.get('/ingredients/view_xml/' + ingredientId, function(xml) {
    console.log($(xml));
}, 'xml');