2011-01-29 11 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リンク(多くの1):その後、

<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の戻り値を警告しているので、複数の警告ボックスが表示されていることに気付きました。メインページがロードされてからクリックした最初のリンクの場合 - それは問題ありませんが、2番目のリンクをクリックすると、クリックした前の各ページのアラートが表示されます現在のページ。

私はよく説明してくれることを願っています。私が説明する必要がある場合は、教えてください。これを解決するためには本当に助けが必要です。 :)(PHPスクリプトが関連していると思うなら、私はそれを投稿することができますが、$ _POST変数を出力して、デバッグの目的でどのページ情報が送られてくるかを知らせます)

ありがとうございます複数の応答については

$(".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呼び出しが戻るまでの任意の更なるクリックを無効にするblockuiのようなものを使用することができます。私はあなたにスクリプトを変更する必要があると思うjQueryの​​documentationから、 キー

+1

PHPのcURLライブラリがあればそれを使用してみてはいかがですか? http://php.net/manual/en/book.curl.php –

+0

@ジャレッド:私は思っていませんでした...もしあなたがそれがより良くなると思うなら、私はそれが正しいことを得た後、改善としてそれを見るかもしれません最初にこの方法。 – Key

+0

@ Jared:前回のコメントに追加:実際には、これをcURLで実装しようとしましたが、なぜ停止したのか忘れてしまいました。私は、URLを介して変数を渡すことがわからないと思います。私はそれが正しく機能するようになるとは思わない。 – Key

答えて

1

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

ラインは、あなたがリンクを押すたびに実行されますので、

+0

私は同意します - あなたのコールバックが間違った場所にあるようです。 –

+0

これで問題は解決しました。確かに簡単な修正でした。 blockuiについては、実際には私のサイトの別のセクションに実装されていますが、複数のリンクの問題は、投稿が完了する前にすべてが一度にクリックされているというわけではありませんでしたが、ブロックUIはまだやめるべき良い提案ですユーザ入力。 – Key

+0

今、リンクがiframeに読み込まれる前にコンテンツを取得しているという問題があります。まだリンクをクリックしていないと、空のhtmlページが取得されますが、もしあれば、前のコンテンツあなたがクリックしたリンク - 現在のページではありません。私は、loadの関数部分が、iframeがロードされた後にのみ実行されると考えていました。何かご意見は? – Key

0

です。 loadhandlerをdocument.ready上のiframeに追加するだけです。

0

この機能をトリガーする複数のリンクをユーザーがクリックすると、1つのiframeを使用しているにもかかわらず、この問題が発生します。保存プロセスごとにiframeを作成することをお勧めします。その理由は、1つのレンダリングが他のものに影響を与えないからです。

関連する問題