var post = 10;
function load_more(str) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("add").innerHTML = document.getElementById("add").innerHTML + xmlhttp.responseText;
}
};
var post = post + 10;
xmlhttp.open("GET", "fetch_more.php?number=" + post , true);
xmlhttp.send();
}
当我加载网站时,我希望浏览器定义要发布的值10并且不做任何其他操作,直到我按下一个调用load_more()函数的按钮,该函数将该值递增10并通过Ajax将其传递给PHP。
所需的行为是在网站上发布10个帖子,然后在每次按下按钮时再按下10个按钮。
但PHP只会抛出一个MySQL错误,日志显示post var是NaN。
答案 0 :(得分:7)
该行
var post = post + 10;
是罪魁祸首。 Javascript有一个名为hoisting的行为,这实际上意味着您的变量总是在作用域的顶部声明。
因此,在您的代码中,会发生以下情况:
var post = 10;
function load_more(str) {
var post; // `post` is now undefined
//...other code
post = post + 10; // undefined + 10 evaluates to NaN
}
我希望您可以看到,因为post
在函数开头重新定义,post
在undefined
中使用post + 10
时会post = post + 10
NaN
评估为undefined + 10
(因为NaN
评估为var
)。
要解决您的问题,只需从正面删除post = post + 10;
:
post += 10;
或:
printer
答案 1 :(得分:1)
您使用关键字var
重新初始化变量,这就是问题所在。
一个简单的post += 10;
可以正常工作。
答案 2 :(得分:0)
原因是 var 表示声明一个新变量。因此,您正在尝试创建一个新变量,并将其值设置为自身+ 10.新变量的默认值为未定义,因此您说" var post = undefined + 10& #34;,这是NaN
答案 3 :(得分:0)
使用post += 10
或post = post + 10
在您的功能中删除var
。它隐藏了在函数外声明的变量post
。