【发布时间】:2016-01-14 15:50:38
【问题描述】:
我正在尝试编写一个从选择框中删除元素的函数,但前提是该元素未用于其他用途。例如,如果选择框有一个学生姓名列表,它首先检查学生姓名是否在某处使用(或存储在数据库中)。检查脚本会根据名称是否在使用中简单地回显“true”或“false”。如果不再使用该名称,则继续将其删除。否则,它会提醒您。
function removeListItem(selectBox, value)
{
var removed = 0;
for (var x = 0; x < selectBox.options.length; x++) {
if (selectBox.options[x].value == value) {
var formdata = new FormData();
var check = "false";
formdata.append('number', value);
var ajax = new XMLHttpRequest();
ajax.open("POST", "check.php");
ajax.send(formdata);
ajax.onreadystatechange = function() {
if (ajax.readyState == 4 && ajax.status == 200) {
check = ajax.reponseText;
if (check == "true") {
alert("You have selected a number in use!");
}
}
}
if (check == "false") {
selectBox.remove(x);
removed = 1;
}
}
}
return removed;
}
问题是它几乎从不运行检查(据我观察),所以当我试图删除我不应该删除的东西时永远不会发出警报。
我认为这与同步与异步 javascript 有关,所以我想知道我应该怎么做才能获得所需的功能。
我想返回已删除,因为当我调用 removeListItem 时它被添加到计数器中。我想要一个计数器,因为 selectBox 允许同时进行多次删除,所以我会跟踪每次删除。
【问题讨论】:
-
您的
(check == "false")if 语句没有括号,因此removed = 1;不在该条件范围内,并且每次都会被调用。 -
是的,我解决了这个问题。谢谢。 (不过,它并没有真正改变所需的功能)。
-
在您的
check.php文件中发布相关代码也可能会有所帮助 -
我认为就 php 文件的处理方式而言,无需担心太多。这是一个简单的mySQL数据库查找,然后我只是简单地回显“true”或“false”,如果我没记错的话应该由responseText拾取。
标签: javascript php ajax xmlhttprequest