2

我有一个非常简单的 ajax 脚本,用于将 HTML 文件加载到 div 中。脚本如下所示:

<head>
<script>
function fetchResults(){
/*$(document).ready(function() {*/
                $('#slideshow').cycle({
                fx: 'fade',
                pager: '#smallnav', 
                pause:   1, 
                speed: 1800,
                timeout:  3500 
            });         
        });
</script>
<script type="text/javascript">

var bustcachevar=1 (1=yes, 0=no)
var loadedobjects=""
var rootdomain="http://"+window.location.hostname
var bustcacheparameter=""

function ajaxpage(url, containerid){
var page_request = false
if (window.XMLHttpRequest) // if Mozilla, Safari etc
page_request = new XMLHttpRequest()
else if (window.ActiveXObject){ // if IE
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
} 
catch (e){
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e){}
}
}
else
return false
page_request.onreadystatechange=function(){
loadpage(page_request, containerid)
}
if (bustcachevar) //if bust caching of external page
bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
page_request.open('GET', url+bustcacheparameter, true)
page_request.send(null)
}

function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(containerid).innerHTML=page_request.responseText
}

function loadobjs(){
if (!document.getElementById)
return
for (i=0; i<arguments.length; i++){
var file=arguments[i]
var fileref=""
if (loadedobjects.indexOf(file)==-1){
if (file.indexOf(".js")!=-1){ //If object is a js file
fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", file);
}
else if (file.indexOf(".css")!=-1){ //If object is a css file
fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", file);
}
}
if (fileref!=""){
document.getElementsByTagName("head").item(0).appendChild(fileref)
loadedobjects+=file+" " 
}
}
}

</script>
</head>

它将所说的 HTML 文件整齐地加载到这个 div 中:

 <div id="rss">
<script type="text/javascript">
            ajaxpage('news.html', 'content');   
        </script>
</div>

但是在其中一个 HTML 文件中,我有一点 javascript 不会加载到 div 中,但在直接查看页面时加载正常。

<script src="http://feeds.feedburner.com/xxx/QFMN?format=sigpro" type="text/javascript" ></script>

我知道 ajax 中的 javascript 存在问题,但也知道有一种解决方法。作为 javascript 的菜鸟,我不完全确定如何工作。有什么建议么?

4

2 回答 2

2

由于您似乎已经在使用 jQuery,请,请,请使用 jQuery 的 Ajax 方法来执行异步请求。您的所有代码都可以替换为

$(function () {
    $('#container').html($.get('/some/other/url.html'));
});

这是一个链接示例,单击该链接会将 a 的内容替换为divAJAX 调用的结果:

<a class="ajaxLink" href="/some/other/url.html">next</a>
<div id="container">
    Hello there
</div>

<script type="text/javascript">
    $(function () {
        $("a.ajaxLink").click(function () {
            $('#container').load($(this).attr('href'));
            return false;
        });
    });
</script>

请注意我们如何巧妙地使用href链接的属性来指定 URL - 如果客户端没有启用 JavaScript,则链接将照常工作。

关于 AJAX 方法的 JQuery 文档是有价值的信息来源。请参阅.load() 方法的文档中的“加载页面片段”和“脚本执行”,了解加载页面中的脚本是如何执行的。

(另外,使用jslint或类似的服务非常有帮助)

于 2013-02-01T22:04:23.287 回答
0

实际上,

您不能执行来自 ajax 调用的 Javascript。您可以执行eval(result)if resultis pure javascript,也可以使用jquery类似选择器从结果中获取数据。

主要问题是您不应将数据导出为 html 格式,而应以 JSON 或 XML 格式导出

您的代码可能如下所示:

$.ajax({
  url: "url",
  type: "GET",
  datatype: "xml",
  cache: false,
  success: function(response) {
    alert($("Result",response).text())
    eval($("Code",response).text())
  }
});

使用此输出:

<?xml version='1.0' encoding='UTF-8'?> <Result>Hi</Result> <Code>console.log(1)</Code>

此代码将警告 Hi 并执行代码 console.log(1)

于 2013-02-01T22:28:51.050 回答