调用“父”函数的AJAX

时间:2011-11-02 19:37:25

标签: javascript jquery html ajax

我已经看过一些问题,比如我要问的问题,但没有相同的问题。我有两个html文件,主要和今天。我想要做的是通过AJAX将to​​day.html加载到main.html中的子div中。加载后的某个时候,我想从today.html调用一个驻留在main.html中的函数

在Main中我有这个功能:

function drawCircle (size){             
   alert('DRAWING');
}

这个AJAX加载:

$("#leftofad").ajax({
   url: ":Today.html?r="+genRand(),
   type: 'GET',         
   success: function(data) { },
   error: function() { alert('Failed!'); },
});

这个div:

<div id="leftofad"></div>

在Today.html中我有

<script type="text/javascript">
    $(document).ready(function(){       
       drawCircle (100);
    });
</script>

负载进展顺利,但Today.html似乎没有识别drawCircle函数。我已经尝试了几种前体,包括这个。,窗口。和父...

我知道我可以在jQuery中使用AJAX加载器的回调方法,但是我不一定要在加载完成时调用drawCircle。我可能想等一下或者由于用户的操作而做。是否可以从加载AJAX的div中引用这些函数?如果没有,我可以使用像事件和监听器这样的替代方法来激活drawCircle函数吗?

4 个答案:

答案 0 :(得分:2)

$("#leftofad").ajax不合适。

jQuery的$.ajax函数使用选择器。

您可以使用的是load

$("#leftofad").load("Today.html?r="+genRand(), function(){
      alert('loaded successfully!');
});

答案 1 :(得分:2)

由于您要将JS加载到页面中,请尝试直接调用该函数? (就绪功能将不会运行,因为主页已加载)

main.html中

<script type="text/javascript">
    function drawCircle(size) { alert("DRAWING" + size); }

    $(function() {
        $("#leftofad").load("Today.html?r="+genRand(), function() {
              alert('loaded successfully!');
        });
    });
</script>
<div id="leftofad"></div>

Today.html

<script type="text/javascript">
    drawCircle(100);
</script>

如果这不起作用,我强烈怀疑在AJAX调用中返回的 JavaScript没有被执行。

在这种情况下,请参阅:How to execute javascript inside a script tag returned by an ajax response

答案 2 :(得分:0)

这里的每个人都有一些很好的答案,但我认为存在知识差距,我们缺少一些信息。如果我是你,我会在drawCirle之前的Today.html文件中添加一个警告。然后我会在Firefox中使用IE或Chrome开发工具或Firebug来运行此页面。显示警报时,您可以在javascript代码中添加断点。然后检查全局范围以尝试找到drawCirle ...

很抱歉这不是一个确切的答案,但是对于javascript文件,您需要使用调试工具。

答案 3 :(得分:-1)

虽然没有一个div的document.ready函数,但是有一个hack可以正常工作:

create your returning data as a full html page:
<html>
<head>
 <script type='text/javascript'>
  $(document).ready( function () {
   do-this;
   to-that;
    ....
  });
 </script>
</head>
<body>
 <% 
   your possible vbscript
 %>
 the rest of stuff to be loaded into that div
</body>
</html>

然后,你可以从不同的页面加载中获得尽可能多的级联div加载......并且冲洗并重复......永远......用不同的DOCTYPE实验以查看不同的结果。

编辑:

然后,当然,您使用

加载原始MAIN
$('#thedivid').load('url-of-the-html-returning-page');

反过来,它可以在返回页面document.ready中进行非常相同的调用,例如; $('#thedivid-inthereturningdata-html-page').load('url-of-the-html-of-the-child-process-for-whaterver); ....等等。

继续,播放并制作精彩的基于ajax的应用......