所以我正在使用英特尔XDK创建移动应用程序,我发送了一个用户名和密码的JavaScript POST请求。我还对HTTP状态代码做了一些研究,发现了这个:
200 OK - Standard response for successful HTTP requests. The actual response will depend on the request method used. In a GET request, the response will contain an entity corresponding to the requested resource. In a POST request the response will contain an entity describing or containing the result of the action.
201 Created - The request has been fulfilled and resulted in a new resource being created.
202 Accepted - The request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place.
所以我假设当通过POST请求插入新用户时状态为201.但是当我有这个代码时:
XMLHTTP.onreadystatechange = function () {
if (XMLHTTP.status == 201) {
alert("User created.");
} else {
alert("Error!");
}
}
它会显示"错误!"而不是"用户创建。"但是当我把它添加到代码中时:
XMLHTTP.onreadystatechange = function () {
if (XMLHTTP.status == 201 || XMLHTTP.status == 200) {
alert("User created.");
} else {
alert("Error!");
}
}
显示"用户创建。"所以我想知道即使我发送一个POST请求插入数据库,状态如何变为200.
其次,它会警告"用户创建。" 4次?是因为它是在onreadystatechange函数中,所以它每次都会改变并被警告?如果是这样我可以做到这样它只会提醒一个人吗?我是否应该在setinterval中包含if语句,如下所示:
setInterval(function () {
if (XMLHTTP.status == StatusNumberHere) {
alert("Blah");
}
}, 10);
答案 0 :(得分:1)
很少有网站使用这些标题,即使请求成功插入数据,您的后端也可能只发送200
。
关于您的第二个问题,您的提醒被触发四次的原因是因为onreadystatechanged
被调用了四次,每次都有不同的readyState
:
因此,您可能希望将XMLHTTP.readyState === 4
添加到if语句中,以便最终成为:
XMLHTTP.onreadystatechange = function () {
if (XMLHTTP.status === 200 && XMLHTTP.readyState === 4) {
alert("User created.");
} else {
alert("Error!");
}
}
答案 1 :(得分:0)
返回的状态取决于服务器决定如何处理它,在大多数情况下,您只需获得成功(200),因此您所做的事情没有任何问题或异常。
setInterval = hack,除非实现一些实际的间隔函数,否则不惜一切代价。 您可以使用
检查XMLHTTP请求的readystateXMLHTTP.readyState == 4
仅过滤掉已完成的事件。
以下是就绪状态事件的列表: http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp