在ajax调用之后 - $(document).ready();?

时间:2011-06-07 05:11:55

标签: javascript jquery ajax

我遇到了问题。这就是我在标题

中的某个页面上的内容
 $(document).ready(function(){
       $(".ajax").click(function(e){
       var url = $(this).attr("href");
       var url = url.split("##/");

       if (!url[1]){url[1]=" ";}
       var page = "http://<?php echo $_SERVER[SERVER_NAME]; ?>page.php?ajax=1&what="+url[0]+url[1];
       $("#content").load(page);

       var kkk = 'Asdasdasd';
       });
 });

所以,点击<a href="##/new_page" class="ajax">new</a>后,内容正在填充:

<script> alert(kkk); </script>
<a href="##/old_page" class="ajax">old page</a>

但是,由于新页面没有看到kkk,并且原始页面上的链接都不起作用,因此不会考虑警报。为什么呢?

2 个答案:

答案 0 :(得分:2)

kkk变量在文档就绪函数的范围内被括起来。将其移到此功能之外:

var kkk = '...';

$(document).ready(function () {
    ...
});

答案 1 :(得分:2)

为了使链接在重新加载后能够正常工作,您可能需要一个直播活动。这将使用ajax类来监视任何新对象,而不仅仅是加载原始文档时存在的对象。如果您需要设置其他任何内容(通常在文档准备就绪内),请将其作为load()的第二个参数放入匿名函数中,因为它不能保证加载新内容。例如:

   $(".ajax").live('click', function(e){
   var url = $(this).attr("href");
   var url = url.split("##/");

   if (!url[1]){url[1]=" ";}
   var page = "http://<?php echo $_SERVER[SERVER_NAME]; ?>page.php?ajax=1&what="+url[0]+url[1];
   $("#content").load(page, function () { var kkk = 'Asdasdasd'; });

   });

或者正如@Levi指出的那样,.delegate调用可以完成同样的事情,同时减少浪费: $('content').delegate('.ajax', 'click', function() (...)