我将带有AJAX的GET数据发送到另一个文件。另一个文件我有echo "<script>alert('Something');</script>";
。这是用AJAX动态显示的,即
var ajaxDisplay = document.getElementById('edit');
ajaxDisplay.innerHTML = ajaxRequest.responseText;
将<script>alert('Something');</script>
置于 div,并使用名称编辑。
但它没有提醒任何事情。
如何让它发挥作用?
我混合了html / javascript。 这是代码。
function ajaxFunctions(){
var ajaxRequest; // The variable that makes Ajax possible!
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
var ajaxDisplay = document.getElementById('edit');
ajaxDisplay.innerHTML = ajaxRequest.responseText;
}
}
var namef = document.getElementById('nameed').value;
var queryString = "?namef=" + namef;
ajaxRequest.open("GET", "try.php" + queryString, true);
ajaxRequest.send(null);
}
也许要找到脚本标签并找到 eval ? 但是如何找到脚本标签?
答案 0 :(得分:1)
不要试图在DOM中注入脚本元素,而是让脚本返回:
alert('Something');
然后使用eval(response);
来运行它。或者您可以添加一个脚本元素,其src
属性指向返回JavaScript的页面<head>
(这是首选方法)。
function loadScript(url) {
var head = document.getElementsByTagName("head")[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
head.appendChild(script);
}
请记住,这不适用于跨域请求 - 脚本必须与运行代码的页面具有相同的来源。要解决这个问题,你必须使用回调。
答案 1 :(得分:0)
看起来设置innerHTML的唯一目的是尝试让JS执行。但是一旦页面被加载,JS就不会“知道”它需要解析并执行你已经改变的新文本,所以你的方法不起作用。在这种情况下,你想要的是一个回调函数:
http://api.jquery.com/jQuery.ajax/
我没有使用过jQuery,但看起来你只需要将一个'complete'属性添加到你传递给.ajax()调用的设置对象中,如下所示:
$.ajax({
// ......
complete: function(){
alert('Something');
}
// ......
});
在这种情况下,一旦ajax调用完成,回调函数就会执行。如果您需要将代码附加到其他事件,您可以选择其他事件,例如成功,失败等等。
答案 2 :(得分:0)
但是如何找到脚本标签?
好吧,parent.getElementsByTagName('script')
然后评估里面文本节点的data
就可以了。
但是,插入包含脚本标记的内容是不可靠的,并且在浏览器中的工作方式略有不同。例如。 IE将在脚本节点第一次插入文档内的任何父节点时执行脚本,而Firefox将在第一次将包含脚本的子树添加到文档内的节点时执行脚本。因此,如果您不是非常小心,您可能会在某些浏览器上执行两次脚本,或者在进一步的页面操作后在错误的时间执行脚本。
所以不要。返回要对任何HTML内容单独执行的脚本,例如。使用包含HTML和JavaScript的JSON对象。