问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ajax返回javascript代码并执行

发布网友 发布时间:2022-04-28 12:14

我来回答

5个回答

热心网友 时间:2022-04-22 14:47

帖链接会被百度吃掉

动态加载js的四种方法

1、直接document.write
<script language="javascript">
document.write("<script src='test.js'><\/script>");
</script>
2、动态改变已有script的src属性
<script src='' id="s1"></script>
<script language="javascript">
s1.src="test.js"
</script>

3、动态创建script元素
<script>
var oHead = document.getElementsByTagName_r('HEAD').item(0);
var oScript= document.createElement("script");
oScript.type = "text/javascript";
oScript.src="test.js";
oHead.appendChild( oScript);
</script>

  这三种方法都是异步执行的,也就是说,在加载这些脚本的同时,主页面的脚本继续运行,如果用以上的方法,那下面的代码将得不到预期的效果。
要动态加载的JS脚本:a.js,以下是该文件的内容。
var str = "中国";
alert( "这是a.js中的变量:" + str );

主页面代码:

<script language="JavaScript">
function LoadJS( id, fileUrl )
{
var scriptTag = document.getElementByIdx( id );
var oHead = document.getElementsByTagName_r('HEAD').item(0);
var oScript= document.createElement("script");

if ( scriptTag ) oHead.removeChild( scriptTag );
oScript.id = id;
oScript.type = "text/javascript";
oScript.src=fileUrl ;
oHead.appendChild( oScript);
}

LoadJS( "a.js" );

alert( "主页面动态加载a.js并取其中的变量:" + str );
</script>
上述代码执行后 a.js 的 alert 执行并弹出消息,

但是 主页面产生了错误,没有弹出对话框。原因是 'str' 未定义,为什么呢?因为主页面在取 str 的
时候 a.js 并没有完全加载成功。遇到需要同步执行脚本的时候,可以用下面的第四种方法。

4、原理:用XMLHTTP取得要脚本的内容,再创建 Script 对象。
注意:a.js必须用UTF8编码保存,要不会出错。因为服务器与XML使用UTF8编码传送数据。
主页面代码:
<script language="JavaScript">
function GetHttpRequest()
{
if ( window.XMLHttpRequest ) // Gecko
return new XMLHttpRequest() ;
else if ( window.ActiveXObject ) // IE
return new ActiveXObject("MsXml2.XmlHttp") ;
}

function AjaxPage(sId, url){
var oXmlHttp = GetHttpRequest() ;

oXmlHttp.OnReadyStateChange = function()
{
if ( oXmlHttp.readyState == 4 )
{
if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )
{
IncludeJS( sId, url, oXmlHttp.responseText );
}
else
{
alert( 'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')' ) ;
}
}
}

oXmlHttp.open('GET', url, true);
oXmlHttp.send(null);
}

function IncludeJS(sId, fileUrl, source)
{
if ( ( source != null ) && ( !document.getElementByIdx( sId ) ) ){
var oHead = document.getElementsByTagName_r('HEAD').item(0);
var oScript = document.createElement( "script" );

oScript.language = "javascript";
oScript.type = "text/javascript";
oScript.id = sId;
oScript.defer = true;
oScript.text = source;

oHead.appendChild( oScript );
}
}

AjaxPage( "scrA", "b.js" );

alert( "主页面动态加载JS脚本。");
alert( "主页面动态加载a.js并取其中的变量:" + str );
</script>

用ajax同步加载JS代码,加载一个还好,两三个或者更多的时候,还是用异步加载比较快。
我使用第三种方法,每个JS我都为其命名,当某个JS加载完成后,则置一个代表其已经加载完成的标志。

未加亮代码复制打印
//所有的JS文件
var jsM = {
page : false ,
dhtmlXTree : false ,
photo_tree : false
};
function getJSM(f)
{
var reg = /\/(\w+)\./;
jF = f.match(reg);
return jF[jF.length-1];
}

function loadJS(js)
{
id = getJSM(js);
var scriptId = document.getElementByIdx(id);
var head = document.getElementsByTagName_r('head').item(0);
if(scriptId)
{
//head.removeChild(id);
}
else
{
script = document.createElement('script');
script.src = js;
script.type = 'text/javascript';
script.id = id;
head.appendChild(script);
}
}
//JS时候,判断jsM中,代表其模块的标识是否为true,如果为false,则尚未加载
loadJS("page.js")

热心网友 时间:2022-04-22 16:05

可以考虑用js的eval()方法,该方法接受一个字符串为参数,并将字符串视为一段js代码并执行。当然,出于安全考虑,很多人不建议在代码中使用该函数,要用这个函数,你只能自己去保证ajax返回的代码是安全的。

热心网友 时间:2022-04-22 17:40

直接运行这个函数就行了呀,a();

热心网友 时间:2022-04-22 19:31

eval("("+script+")")

热心网友 时间:2022-04-22 21:39

http://zhidao.baidu.com/question/320774957.html

试试呗
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
土狗一般多大开始懂人性 如何训练 小土狗怎么训练才听话 新手训狗的好方法 跑跑卡丁车故事模式哪一关还海盗船长(人物)奖励的,骨灰玩家说下._百 ... 跑跑卡丁车手游被遗忘的炮塔的宝藏在哪_跑跑卡丁车手游被遗忘的炮塔的... 跑跑卡丁车手游在被遗忘的炮塔附近搜寻宝藏怎么做?遗忘炮塔宝藏攻略... 跑跑卡丁车手游被遗忘炮塔宝藏在哪 炮塔附近搜寻宝箱位置详解-新手攻略... 跑跑卡丁车被遗忘的炮塔附近宝藏在哪里_跑跑卡丁车被遗忘的炮塔附近宝藏... 跑跑卡丁车手游在遗忘的炮塔附近搜寻宝藏在哪 遗忘炮塔宝藏位置详解 迅捷路由器使用问题 ...MATLAB7.0的,程序总是在打开后一会,就自动关闭了。希望能帮忙哦,感... 用烤箱做云朵面包不用油纸可以吗? 写出使用javaScript实现Ajax的原生代码? 减肥云朵面包怎么做 google浏览器怎样对ajax中的js进行调试?求高手指教,谢谢 用JavaScript,ajax做搜索是如何做的 像蛋糕一样松软的面包有吗,怎么做? 平湖到宝安代驾要多少钱 广东金莎汇汽车销售服务有限公司怎么样? 准备开一个音乐餐吧,哪里有音响设计方案提供? 代驾神器开通哪些城市? 惠州博罗哪个代驾好 音乐餐吧需要办理什么证? 谁知道Punk bar 庞客音乐餐吧是做什么的,有什么好吃的? 开音乐餐吧需要什么证件 Punkbar 庞客音乐酒馆 和庞客音乐餐吧有什么区别? 什么是音乐餐吧啊?主要的工作程序是什么?是不是和酒吧是一样的? 适合家有儿女微信网名 独家酸甜年糕的正宗做法,独家酸甜年糕怎样做才好吃的 年糕做甜的怎么做好吃 酸甜年糕的做法,酸甜年糕怎么做好吃,酸甜年糕 javascript 实现搜索框的自动建议功能 做云朵面包没有油纸怎么办? Google网页搜索API如何用? 中班美术活动《云朵面包》教学过程的评价 谁能提供一个简单的Ajax实例,通过js脚本代码实现的 怎么用Google API搜索? 关于ajax与JavaScript 关于goole map api的几个问题 javascript代码写法问题 如何让搜索引擎抓取AJAX内容 JS、AJAX等实现:HTML/JSP页面中即时显示查询的数据,怎么写? ajax中的框架 和它们的区别 google地图(web版)是怎么实现的? 如何应用AJAX技术实现以下效果 我在用Ajax实现搜索提示时,程序不进入服务器中的doPost方法,哪位大 ... 单身梦见有人介绍对象来家里说我家穷? 梦见自己爱的人找对象了,什么意思? 梦见一大堆人给我同学找对象 周公解梦亲人找对象家人不同意 第一次梦到前对象找对象了+第二次做噩梦