为什么我的数组在我的 savetime 函数中未定义,但在其他函数中正常运行

why my array is undefined in my savetime function but running properly in other functions?

本文关键字:函数 我的 其他 正常运行 未定义 savetime 为什么 数组      更新时间:2023-09-26

>我正在调用我的保存函数,st_bookmark和ed_bookmark数组在我的 JSON stringfy 函数中不显示任何数据,数组未定义或未捕获类型错误发生

  <script>
            var check = true;
            var st_bookmark = new Array();
            var str_print = new Array();
            var end_print = new Array();
            var ed_bookmark = new Array();
            </script>
        <script>
            function save() {
                var link = "M7lc1UVf-VE";
                var bk_name = $('#bookmark_name').val();
                var bk_tags = $('#bookmark_tags').val();
                var bk_email = $('#bookmark_email').val();
                var user = '@Session["email"]';
                var t = st_bookmark.pop();
                var ss = ed_bookmark.pop();
                var data = 
({ name: bk_name, tags: bk_tags, email: bk_email, link: link, start_bookmark: st_bookmark, end_bookmark: ed_bookmark }); 
                $.ajax({
                    url: '@Url.Action("save_bookmark", "chopaal")',
                    type: "POST",
                    contentType: "application/json",
                    data: { data: data },
                    success: function () {
                        window.alert('success!!');
                    }
                });
                var check = true;
                var st_bookmark = [];
                var str_print = [];
                var end_print = [];
                var ed_bookmark = [];
            }
            function starttime() {
                if (check == true) {
                    temp = player.getCurrentTime();
                    st_bookmark.push(temp);
                    str_print.push((temp / 60).toFixed(2));
                    document.getElementById("str_book").innerHTML = str_print;
                    check = false;
                } else {
                    window.alert("Please End The Previous Bookmark");
                }
            }
            function endtime() {
                if (check == false) {
                    temp = player.getCurrentTime();
                    ed_bookmark.push(temp);
                    end_print.push((temp / 60).toFixed(2));
                    document.getElementById("end_book").innerHTML = end_print;
                    check = true;
                } else {
                    window.alert("Please Add the Starting Bookmark");
                }
            }
        </script>

变量声明在 JavaScript 中被提升:

var data = {start_bookmark: st_bookmark};
var st_bookmark = [];

相当于

var data;
var st_bookmark;
data = {start_bookmark: st_bookmark};
st_bookmark = [];

如您所见,st_bookmark在获得值分配之前被访问,此时其值仍undefined

我想您真正想要的是访问全局声明的同名变量。在这种情况下,您应该从 save 中完全删除这些名称相似的变量的声明。

如果要在 Ajax 调用成功后"重置"这些变量,则需要将赋值移动到success回调中并删除 var 关键字(以便标识符引用全局变量):

success: function() {
    window.alert('success!!');
    check = true;
    st_bookmark = [];
    str_print = [];
    end_print = [];
    ed_bookmark = [];
}