我正在调用ajax方法来更新div。它包含需要java脚本文件的链接和函数。但是这些方法和函数没有被正确调用,因为java脚本文件没有通过ajax调用包含在内。例如,我试图调用一个灯箱功能,但它被重定向到不同的页面而不是灯箱。
提前致谢,Anubhaw Prakash
答案 0 :(得分:2)
原型中的Ajax框架将正确执行<script>
标记的文本内容,但不通过<script src="somefile.js"/>
导入新的脚本文件。我想出的唯一解决方案是在页面的头部导入我需要的所有javascript文件。这样,导入文件中的函数可用于Ajax响应中执行的内联javascript代码。
答案 1 :(得分:1)
我有一个类似的问题,我确实想要后载一些javascript。我做的是分离加载html片段并将脚本加载到两个调用中。为了加载脚本,我调用以下函数(我有JQuery处理ajax部分):
function loadModule(name, callback) {
$.ajax({type: "POST"
, url: "/js/" + name
, dataType: "script"
, success: callback
});
}
答案 2 :(得分:0)
我看到你正在使用Ruby on Rails - 这是否意味着你在客户端使用Prototype?如果是这样,Prototype的Ajax.Updater
将忽略引用外部文件的脚本标记(它将评估内联内容的脚本标记)。因此,要将这些外部文件添加到您的页面,您必须通过onSuccess
回调挂钩到该过程,在responseText
中查找带有src
属性的脚本标记,并处理这些你自己。一旦您确定了相关的脚本标记并提取了它们的src
属性,您就可以通过动态添加脚本来包含它们,如this article中所述,来自非官方原型&amp; script.aculo.us wiki。
答案 3 :(得分:0)
<script>
的 innerHTML
标记不会在写入时执行。您可以element.getElementsByTagName('script')
尝试抓住它们并手动执行它们的脚本,但它非常难看并且不可靠。
与<script>
写入innerHTML
的{{1}}元素发生的事情之间存在繁琐的浏览器差异,然后(直接或通过祖先)重新插入到文档中。你想避免这种事情:根本不要将<script>
写入innerHTML
。
然后您也不必担心两次执行脚本,这是您不想对库脚本执行的操作。您不希望最终得到一个看起来相同但不比较相等的函数/类的两个副本,并且它们将钩子保持在彼此不能很好地相互作用的页面上。动态插入的库脚本是混淆失败的一种方法。
更好地静态包含脚本,并在将新元素写入页面后手动将它们绑定到页面元素。如果你真的需要,你可以让你的AJAX调用获取一个JSON对象,该对象包含要添加的新HTML和要执行的一串脚本。
答案 4 :(得分:0)
可能想尝试在:before选项中运行一些准备好的javascript,以使用正确的文件设置变量?
答案 5 :(得分:0)
注意 - 这是一个同步过程,所以你不必担心脚本是否加载....脚本将始终加载实例你调用该函数,你可以立即开始使用加载的脚本..
让我们使用这两个函数
1)第一个是用于检索值的ajax函数 async应为true以同步发送请求
// AJAX FUNCTION
function loadXMLDoc(reqt,url,reqp,cfunc,async)
{
var xmlhttp;
try// code for IE7+, Firefox, Chrome, Opera, Safari
{
xmlhttp=new XMLHttpRequest();
}
catch(err)// code for IE6, IE5
{
try{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
try{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(E){}
}
}
if(!xmlhttp)
{
alert("error");
}
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
cfunc(xmlhttp.responseText);
}
}
if(reqt=='GET')
{
url+=(reqp!=""?"?":"")+reqp;
xmlhttp.open("GET",url,(async?false:true));
xmlhttp.send();
}
else if(reqt=='POST')
{
xmlhttp.open("POST",url,(async?false:true));
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(reqp);
}
else
{
return false;
}
}
/*use this function
loadXMLDoc(reqt,url,reqp,function(response){
});
*/
2)然后我们使用ajax将js文件作为字符串加载,然后将其附加到新脚本标记的innerHTML然后将其附加到head部分,还有一件事要确保文件已经加载我使用了脚本的id tag作为文件的路径,这使得检查重复的确是一件容易的事......:)
//add new script dynamically
function add_script(src)
{
if(!document.getElementById(src))
{
loadXMLDoc("GET",src,"",function(jsresp){
var head = document.getElementsByTagName("head")[0];
var script=document.createElement("script");
script.type='text/javascript';
script.id=src;
script.text=jsresp;
head.appendChild(script);
},true);
}
}
感谢我以前获得的所有帮助,并将从本网站及其用户获取用于开发目的......
关于VIPIN JAIN
答案 6 :(得分:-2)