Javascript 为什么我的数组在savetime函数中未定义,但在其他函数中正常运行?
我正在调用我的save函数,st_bookmark和ed_bookmark数组不显示JSON stringfy函数中的任何数据数组未定义或出现未捕获类型错误Javascript 为什么我的数组在savetime函数中未定义,但在其他函数中正常运行?,javascript,Javascript,我正在调用我的save函数,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();
<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>
var检查=真;
var st_bookmark=新数组();
var str_print=新数组();
var end_print=新数组();
var ed_bookmark=新数组();
函数save(){
var link=“m7lc1uv 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();
风险值数据=
({name:bk_name,tags:bk_tags,email:bk_email,link:link,start_bookmark:st_bookmark,end_bookmark:ed_bookmark});
$.ajax({
url:'@url.Action(“保存书签”、“chopaal”),
类型:“POST”,
contentType:“应用程序/json”,
数据:{data:data},
成功:函数(){
window.alert('success!!');
}
});
var检查=真;
var st_bookmark=[];
var str_print=[];
var end_print=[];
var ed_bookmark=[];
}
函数starttime(){
如果(检查==true){
temp=player.getCurrentTime();
st_书签推送(临时);
str_打印推送((温度/60.toFixed(2));
document.getElementById(“str_book”).innerHTML=str_print;
检查=错误;
}否则{
window.alert(“请结束上一个书签”);
}
}
函数endtime(){
如果(检查==false){
temp=player.getCurrentTime();
ed_书签推送(临时);
结束打印。推送((温度/60)。固定(2));
document.getElementById(“end_book”).innerHTML=end_print;
检查=正确;
}否则{
window.alert(“请添加起始书签”);
}
}
变量声明以JavaScript格式发布:
var data = {start_bookmark: st_bookmark};
var st_bookmark = [];
相当于
var data;
var st_bookmark;
data = {start_bookmark: st_bookmark};
st_bookmark = [];
如您所见,st_bookmark
在获得赋值之前被访问,此时其值仍然是未定义的
我猜您真正想要的是访问全局声明的同名变量。在这种情况下,您应该从save
中完全删除这些类似命名变量的声明
如果要在Ajax调用成功后“重置”这些变量,则需要将赋值移到success
回调中,并删除var
关键字(以便标识符引用全局变量):
看起来您将它们声明了两次,第一次声明为全局变量,然后在save中声明为局部变量。save()中的注释声明,那么在初始化变量之前访问变量应该是有效的。
success: function() {
window.alert('success!!');
check = true;
st_bookmark = [];
str_print = [];
end_print = [];
ed_bookmark = [];
}