-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 / 解决方案: 我不知道为什么,但一切都适用于 window.onbeforeunload 而不是 jQuery.unload()。一个解释会很棒!我很抱歉这个令人困惑的线程!

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);
                                   }

                                });
                            }
                            ....

// 关于您的编辑:您是否在此处将任何参数传递给脚本?因为我认为问题出在那个逻辑上。window.onbeforeunload = function(e) { $("#div").load("script.php");

于 2012-11-26T02:14:22.620 回答