我有一个ajax变量问题,我似乎无法弄清楚导致它的原因。问题发生在以下几行:
var ajax = ajaxObj("POST", "feedback.php");
我达到之前的警报但不是之后。
<script>
function toShow(elem){
var id = elem.value;
var x = elem.checked;
alert("before");
var ajax = ajaxObj("POST", "feedback.php");
alert("after");
ajax.onreadystatechange = function() {
_("status").innerHTML = "saving to feedback DB...";
if(ajaxReturn(ajax) == true) {
if(ajax.responseText != "update_success"){
status.innerHTML = ajax.responseText;
_("status").innerHTML = "it didn't work";
} else {
_("status").innerHTML = "updated";
}
}
}
ajax.send("id="+id+"&x="+x);
}
</script>
任何想法导致了什么?这段代码同样适用于其他页面。
这是我的ajaxObj函数:
function ajaxObj( meth, url ) {
var x = new XMLHttpRequest();
x.open( meth, url, true );
x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
return x;
}
function ajaxReturn(x){
if(x.readyState == 4 && x.status == 200){
return true;
}
}
答案 0 :(得分:1)
我认为在你的范围内某处,x正在被破坏。你几乎在每个函数中都使用它,一旦你犯了错误,范围链会默默地惩罚你。我可以保证将这些x引用更改为有意义的名称将解决此问题。
问题不太可能出现在代码块中,因为它大部分时间都有效。有些东西正在破坏它。
这与我不久前的一个问题类似:https://twitter.com/akamaozu/status/525494000288284672
也就是说...... x被某处覆盖了。我不知道在哪里,因为它会更深入地查看您的代码以确定真正的问题所在,但将这些x变量更改为实际有意义的内容。这将做两件事: