0

可能重复:
调用从 Ajax 响应返回的 JavaScript 函数

var url = "showpdf.php";
$.ajax({
    type: "post",
    url: url,
    data:    {academic:academic,uni:uni,course:course,lan:lan,sem:sem,subject:subject,type:type,clz:clz},
    success: function(response)
    {
        alert(response);
        document.getElementById("alldata").innerHTML = response;

    }
});

在响应中,我有下面的带有简单 JavaScript 函数的 html 代码

<label onclick="popup()"> clickme </label>
<script>
function popup()
{
  alert("hello");
}
</script>

在这里,这个 popup() 函数不起作用请帮助我。

4

2 回答 2

3

问题是您希望执行 ajax 响应中包含的 Javascript。情况并非如此,浏览器不执行 ajax 响应中包含的任何 Javascript。可能会尝试解析出 Javascript 并以某种方式执行它,例如,eval()但这会很讨厌而且不是一个好主意。使用eval()您还必须考虑它只会接受有效的 Javascript,因此您不能只将响应传递给它,因为其中包含一些 HTML。

一种可能的解决方案是popup()在页面或外部 Javascript 文件中已经定义函数,并在将 HTML 添加到 DOM 后分配点击处理程序。

例如:

function popup()
{
    alert(this.id);
}


document.getElementById("alldata").innerHTML = response;
document.getElementById("myNewLabel").onclick = popup;
于 2012-12-06T11:42:58.477 回答
0

将该字符串隐藏在您的页面中,并在成功时显示它。像:

<label onclick="popup()" id="mylable" style="display:none"> clickme </label>
<script>
function popup()
{
  alert("hello");
}
</script>


var url = "showpdf.php";
$.ajax({
    type: "post",
    url: url,
    data:    {academic:academic,uni:uni,course:course,lan:lan,sem:sem,subject:subject,type:type,clz:clz},
    success: function(response)
    {
       // alert(response);
        $("#mylable").show();

    }
});

尝试使用 DOM 的更好方法。让我知道上面的代码是否适合您。

于 2012-12-06T11:49:13.540 回答