2011-01-29 69 views
0

我在jQuery中有一段代码,用于在单击链接并且内容完成加载后获取iFrame的内容。它的工作原理,但我有一个问题重复 - 至少我认为这是它在做什么,但我无法弄清楚为什么或如何。jQuery代码重复问题

jQuery的JS:

$(".pageSaveButton").bind("click",function(){ 
    var theID = $(this).attr("rel"); 
    $("#fileuploadframe").load(function(){ 
    var response = $("#fileuploadframe").contents().find("html").html(); 
    $.post("siteCreator.script.php", 
     {action:"savePage",html:response, id: theID}, 
     function(data){ 
      alert(data); 
     }); 
    }); 
}); 

HTML链接(许多之一):

<a href="templates/1000/files/index.php?pg=0&preview=false" 
     target="fileuploadframe" class="pageSaveButton" rel="0">Home</a> 

所以,当你点击链接,链接到打开进入的iframe页面,则JS触发并等待内容完成加载,然后抓取iframe的内容并将其发送到PHP脚本以保存到文件中。我遇到了一个问题,当您单击一个行中的多个链接来保存多个文件时,所有以前的文件的内容将被您点击的当前文件覆盖。我已经检查过我的PHP,并且相当积极,错误在于JS。

我注意到,因为我有PHP的返回值警报 - 我得到多个警报框。如果它是自加载主页以来单击的第一个链接 - 那么它很好,但是当您单击第二个链接时,除了预期的当前页面。

我希望我解释得很好,请让我知道如果我需要更好地解释 - 我真的需要帮助解决这个问题。 :)(如果你认为php脚本是相关的,我可以发布它 - 但它只打印$ _POST变量,让我知道哪些页面信息正在发送用于调试目的。)

提前感谢, 关键

+1

撇开,为什么不使用PHP的cURL库,如果它可用? http://php.net/manual/en/book.curl.php –

+0

@Jared:我没有想到...如果你认为它会更好,我可以把它看作是一种改进,当我得到它的正确工作后这种方式首先。 – Key

+0

@Jared:添加到以前的评论:我实际上尝试用cURL实现这一点,但我忘记了为什么我停止了它 - 我认为这与我无法弄清楚通过URL传递变量有关,我不要以为我可以让它正常工作。 – Key

回答

1

从jQuery的​​documentation我想你需要你的脚本改为:

$(".pageSaveButton").bind("click",function(){ 
    var theID = $(this).attr("rel"); 
    var lnk = $(this).attr("href");//LINK TO LOAD 
    $("#fileuploadframe").load(lnk, 
     function(){ 
     //EXECUTE AFTER LOAD IS COMPLETE 
      var response = $("#fileuploadframe").contents().find("html").html(); 
      $.post("siteCreator.script.php", 
       { 
        action:"savePage", 
        html:response, 
        id: theID 
       }, 
       function(data){alert(data);} 
      ); 
    }); 
}); 

对于多响应,你可以使用像blockui禁用任何进一步点击,直到.post调用返回。

+0

我同意 - 这看起来像你的回调是在错误的地方。 –

+0

这解决了这个问题!这当然是一个简单的修复。至于blockui,实际上我已经为我的网站的另一部分实现了这个功能 - 但是多个链接的问题并不是它们在帖子完成之前一次都被点击,但是块ui仍然是一个很好的建议用户输入。 – Key

+0

现在我有问题的内容被抓取之前链接可以加载到iframe中,所以如果你还没有点击链接 - 它会得到一个空白的HTML页面,但如果你有 - 它会得到以前的内容您点击的链接 - 而不是当前页面。我认为load的函数部分只能在iframe加载后执行。有什么想法吗? – Key

0

这是因为该行

$("#fileuploadframe").load(function(){ 

被执行每次按一个链接时。只能将装载处理程序添加到document.ready上的iframe。

0

如果用户有能力通过你的用户界面点击多个链接触发此功能,那么无论你使用单个iframe,你都会遇到这个问题。我会建议每个保存过程创建一个iframe,这就是为什么渲染一个不会影响另一个。