Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery代码重复问题_Javascript_Jquery_Iframe - Fatal编程技术网

Javascript jQuery代码重复问题

Javascript jQuery代码重复问题,javascript,jquery,iframe,Javascript,Jquery,Iframe,我在jQuery中有一段代码,用于在单击链接并加载完内容后获取iFrame的内容。它是有效的,但我有一个问题,它重复-至少我认为这是它正在做的,但我不明白为什么或如何 jQuery JS: $(".pageSaveButton").bind("click",function(){ var theID = $(this).attr("rel"); $("#fileuploadframe").load(function(){ var response = $("#fileup

我在jQuery中有一段代码,用于在单击链接并加载完内容后获取iFrame的内容。它是有效的,但我有一个问题,它重复-至少我认为这是它正在做的,但我不明白为什么或如何

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链接(多种链接之一):


因此,当您单击链接时,链接到的页面被打开到iframe中,然后JS激发并等待内容完成加载,然后获取iframe的内容并将其发送到PHP脚本以保存到文件中。我有一个问题,当您单击一行中的多个链接以保存多个文件时,以前所有文件的内容都会被您单击的当前文件覆盖。我已经检查了我的PHP,并且非常肯定错误出在JS上

我已经注意到——因为我已经警告了PHP的返回值——我得到了多个警告框。如果这是加载主页后您单击的第一个链接,则没有问题,但当您单击第二个链接时,除了当前页面的预期警报外,您还会收到您单击的前几页的警报

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

提前谢谢你, 从jQuery
.load()
中输入,我认为您需要将脚本更改为:

$(".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);}
            );
    });
});

对于多个响应,您可以使用类似的方法禁用任何进一步的单击,直到
.post
调用返回。

这是因为

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

每次按链接时执行。仅将loadhandler添加到document.ready上的iframe

如果用户能够通过您的UI单击触发此功能的多个链接,那么无论您使用的是单个iframe,您都会遇到此问题。我建议为每个保存过程创建一个iframe,这就是为什么一个过程的呈现不会影响另一个过程。

顺便说一下,-如果可以的话,为什么不使用PHP的cURL库呢@贾里德:我没有想到……如果你认为这样更好的话,我可以先把它按这种方式工作,然后再把它看作是一种改进。@贾里德:在前面的评论中补充说:我确实试着用cURL实现了这一点,但我忘了为什么我停止了它-我想这与我无法通过URL传递变量有关,我认为我无法让它正常工作。在某些情况下,我确信这不是最好的解决方案(例如,如果你需要登录)。看起来好像有一个不必要的往返。只是一个想法。你确实需要登录到系统才能使用该接口-但它与应用程序的其余部分无关-除了初始访问权限。我同意-这看起来你的回调位于错误的位置。这解决了问题!这确实是一个简单的解决办法。至于blockui,我实际上已经在我网站的另一个部分实现了它——但多个链接的问题并不是在帖子完成之前它们都被一次点击了,但是block ui仍然是一个停止用户输入的好建议。现在我遇到了在链接加载到iframe之前抓取内容的问题,因此如果您还没有单击链接,它会得到一个空白html页面,但是如果您单击了,它会得到您单击的上一个链接的内容,而不是当前页面。我认为load的函数部分应该只在iframe加载之后执行。有什么想法吗?
$("#fileuploadframe").load(function(){