JQuery код повторяет проблему - PullRequest
0 голосов
/ 29 января 2011

У меня есть фрагмент кода в 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-ссылки (одна из многих):

<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, чтобы сообщить мне, какая информация о странице отправляется в целях отладки.)

Спасибо, впередвремени, ключ

Ответы [ 3 ]

1 голос
/ 29 января 2011

Из документации 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);}
            );
    });
});

Что касается множественных ответов, вы можете использовать что-то вроде blockui , чтобы отключить любые дальнейшие щелчки, пока не вернется вызов .post.

0 голосов
/ 29 января 2011

Если у пользователя есть возможность через ваш пользовательский интерфейс нажимать несколько ссылок, которые запускают эту функцию, то вы столкнетесь с этой проблемой независимо от того, что, поскольку вы используете один iframe.Я бы предложил создать iframe для каждого процесса сохранения, поэтому рендеринг одного не повлияет на другой.

0 голосов
/ 29 января 2011

Это потому что строка

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

Выполняется при каждом нажатии на ссылку. Добавляйте обработчик нагрузки только в iframe для document.ready.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...