异步请求

时间:2011-07-08 05:13:20

标签: javascript ajax

request.open("GET", selectedTab + ".html", true);

这会回复整个html页面还是仅回复某些特定标签中的文本部分。如果我的html页面有图像和段落,那么在我的请求对象中究竟会向我发送什么内容,以及如何使用单个标签(使用javacript),如果它们全部返回?

例如,假设我的html文件是

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” 
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml” lang=”en” xml:lang=”en”>
<head>    
<link type="text/css" href="something" rel="stylesheet">
</head>
<body>
<p>hello</p>
<img src="something.jpg" />
</body>
</html>

现在如何获取该文件的各个组成部分。

2 个答案:

答案 0 :(得分:1)

您将只获得该文件的HTML代码。您必须自己解析元素以提取任何外部文件(即css,js等)

编辑回复编辑(x2): 您的ajax请求将获取HTML,但如果您想获取样式表或图片,则必须解析它。例如(在我的头顶,未完全测试:)):

var iframe = document.createElement("iframe"); //creating dummy iframe to load html into in order to parse it. DOMParser is another option;
iframe.innerHTML = response; //assuming response is the variable you stored the responseText from the AJAX request
var doc = iframe.contentDocument //get the document property of the iframe
var url = doc.getElementsByTagName("link")[0].href; //gets url of stylesheet
var img = doc.getElementsByTagName("img")[0].src; //gets url of img

然后,您可以提出更多请求以获取实际项目。

如果您只想获得各种元素,那么您可以使用doc.getElementsByTagName("p")技术来获取标记。或者根据HTML和上下文,还有其他DOM方法可以更好地工作。

答案 1 :(得分:0)

我建议使用http://jquery.com/库来帮助解析返回的数据。例如:

<script type="text/javascript">

$(function() { // just a document.ready wrapper
    $.get(selectedTab + ".html", function(data) {
        var parsedData = $(data);
        var specificValue = $("#someID", parsedData); // any CSS selector will work in place of #someID
    });
});

</script>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>