有人可以告诉我这个:
$.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调用没有提醒。有人可以解释为什么两个版本的警报不一样吗?
答案 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元素。