这些JQuery调用是一样的吗?

时间:2009-11-07 22:41:04

标签: jquery ajax get

有人可以告诉我这个:

    $.ajax({
        url: 'test.html',
        success: function(data) {
            alert("Data Loaded: " + data);
        }
    });

与此相同:

    $.ajax({
        url: 'test.html',
        success: function(data) {
            alert("Data Loaded: " + $(data).html());
        }
    });

检索此内容时:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>blank page</title>
</head>
<body>
    <div id="content">Some content.</div>
</body>
</html>

我问因为第二个jquery ajax调用没有提醒。有人可以解释为什么两个版本的警报不一样吗?

3 个答案:

答案 0 :(得分:2)

引用jQuery Documentation for the $-function

  

没有属性的简单元素,   例如,“”,通过创建   使用document.createElement。所有其他   通过分配来解析案例   字符串到.innerHTML属性   div元素。 HTML字符串不能   包含无效的元素   在div中,例如html,head,   正文或标题元素。

你不能将完整的html页面放入$ -function中,只能在div - 元素中有效的元素。

答案 1 :(得分:1)

因为doctype是XHTML,所以第一个例子是返回XML。因此,当您提醒XML时它是正确的。在第二个例子中,jQuery必须认为它是XML,无法使用.html()访问。

要使第二个示例起作用,请尝试选项

dataType: "html"

答案 2 :(得分:0)

第二个示例未调用alert,因为success回调内部发生错误。切换萤火虫,您应该看到发生了错误(尽管萤火虫告诉您它发生的线路不准确)。如果由于某种原因,firebug没有显示错误发生,那是因为jQuery正在优雅地处理分配给success的函数的异常。您可以使用try / catch块包装alert并亲自查看。

    $.ajax({
        url: 'test.html',
        success: function(data) {
            try {
                alert("Data Loaded: " + $(data).html());
            } catch (e) {
                alert("Error happened: " + e.message);
            }
        }
    });

发生错误是因为返回的数据不是实际的HTML元素。