-2

以下の解決策:編集#2

ユーザーがソートできるHTMLリストがあります。ドラッグ アンド ドロップ操作のたびにデータを保存したくないので、アンロード時にデータを Cookie とデータベースに保存します。それは働いていますが、:

データを保存した後、リストは非表示になり、次の行に「構文エラー」が表示されます。

<!DOCTYPE html>

何も変更せずに同じページを更新 (F5) した後、すべてが正常に動作するため、奇妙です。

原因を突き止めようとしますが、うまくいきません。それが流れです:

1. visit the page (index.php)
2. change the list (set: list_is_dirty = true)
3. click any internal link (call $(window).unload( ... save_data() ... )
4. target page appears without the list (syntax error!)
5. refreshing the page (everything works fine)

このエラーを見つける方法はありますか? ツールや戦略はありますか?それとも、アンロード機能と同じ経験ですか?

前もって感謝します!

編集:

いくつかのコード:

var list_is_dirty = false;

// document ready?
$(function() {

    function sort_list() {
        // some code, not important
    }

    sort_list();

    $(window).unload(function() {
        if (list_is_dirty == true) {

            /* ---------- HERE's the error! ---------- */
            /* The error occures when I try to call the script.php 
               I tried load(), $.post(), $.get() but nothing works.
               The string is correct. I'm not even able to call any of 
               these functions without params. 
            */

            // send data to script.php to save data 
            $("#div").load("script.php?str="+list_data_str); 

            $.cookie("list_data", list_data_str);
        }
    });
}

編集#2 /解決策: 理由はわかりませんが、すべてがjQuery.unload()の代わりにwindow.onbeforeunloadで機能します。説明は素晴らしいでしょう!紛らわしいスレですみません!

window.onbeforeunload = function(e) {
    $("#div").load("script.php");
}
4

1 に答える 1

1

どこにも定義されていないため、あなたの問題は list_data_str にあると思います。たとえば、AJAX投稿をしたいと言っている場合は、明らかに成功イベントを探す必要がありますURL で $_GET を使用し、どのパラメーターにも注意を払っていないスクリプト..つまり、オブジェクトが欠落しており、ページを更新すると DOM に読み込まれます。どうやらそれがあなたが説明している問題である可能性があります。受信スクリプトやFirebugなどのデバッガーからのエラーなど、問題コードにもう少し関連するものを投稿することをお勧めします。

それをテストする方法に関しては、サポートされているブラウザーで console.log を使用するか、Cookie が設定されているときに単にアラートを出すことをお勧めします。

         var global list_is_dirty = false; 

              function sort_list(list, list_is_dirty) {
                // some code, not important
            //check the list and the flag 
            //you should return a value, else it does not make sense to use a function here.. note the var defined as global
            return list;  //?? not sure what to return as don't know what this code does from the posting
            }



              jQuery(function($)
              {

                $(window).load(function(e){

                                var list_data_str= sort_list( );


                        // send data to script.php to save data 
                        e("#div").load('script.php?str='+list_data_str); 

                                    //on unload destroy the cookie perhaps?? or if it's not set a session variable
                        e.cookie("list_data", list_data_str);

                ...


                            The unload event

                                $(window).unload(function(e) {


                              $("#div").load("script.php?str="+list_data_str); 

                                 $.cookie("list_data", list_data_str);
                                   }

                                });
                            }
                            ....

// EDIT について: ここでスクリプトにパラメータを渡していますか? 問題はそのロジックにあると思うからです。window.onbeforeunload = function(e) { $("#div").load("script.php");

于 2012-11-26T02:14:22.620 に答える