Javascript AJAX请求函数没有返回任何内容

时间:2014-08-11 23:39:08

标签: javascript php ajax validation

我正在尝试创建一个注册页面,告诉用户他们选择的用户名是否唯一,而不重新加载页面。 php脚本'usernameAJAX.php'只是查询sql数据库,如果用户名不是唯一的,则返回“1”,如果是,则返回“0”。出于某种原因,我创建的usernameAJAX(用户名)函数没有返回任何内容,甚至第三行上的'bool'变量也没有设置为“0”。有人可以解释为什么会这样吗?

function usernameAJAX(username) {

var bool = "0";

params  = "AJAXusername=" + username.value;
  request = new ajaxRequest();
  request.open("POST", "usernameAJAX.php", true);
  request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  request.setRequestHeader("Content-length", params.length);
  request.setRequestHeader("Connection", "close");

  request.onreadystatechange = function()
  {
    if (this.readyState == 4)
      if (this.status == 200)
        if (this.responseText != null)
          bool = this.responseText;
  }
  request.send(params);


function ajaxRequest()
{
  try { var request = new XMLHttpRequest(); }
  catch(e1) {
    try { request = new ActiveXObject("Msxml2.XMLHTTP"); }
    catch(e2) {
      try { request = new ActiveXObject("Microsoft.XMLHTTP"); }
      catch(e3) {
        request = false;
  } } }
  return request;
}

return bool;

}

3 个答案:

答案 0 :(得分:1)

您的功能正确,但您必须删除标题内容长度和连接。此外,您必须注意,您的函数将始终返回0.如果您想对下载的值执行某些操作,则必须在此处执行此操作:

function usernameAJAX(username, callback) {
    ...
    if (this.responseText != null) {
        bool = this.responseText;
        callback(bool);
    }
    ...
}


var show = function (bool) {
    alert(bool);
};

// The execution continues in the callback function when bool is downloaded.
usernameAJAX("usuario", show);

如果您希望以传统方式返回bool值,则必须使用非异步请求,这样在下载值时窗口将被阻止,您将浪费AJAX的优势。

答案 1 :(得分:0)

AJAX调用几乎总是返回隐藏或特殊/终结符字符,使用trim命令在使用之前格式化响应,或者更好地用JSON或XML包装返回。

答案 2 :(得分:0)

实际上,usernameAJAX()总是在请求完成之前返回。所以它的返回值总是为'0'。

更新:忘记进行实际修复。

通过更改

使请求非异步
request.open("POST", "usernameAJAX.php", true);

request.open("POST", "usernameAJAX.php", false);

如果您希望usernameAJAX() 返回结果本身,而不是通过回调。

这样,request.send(params);将阻止usernameAJAX()内的执行,直到连接关闭或以错误结束。在此期间,每次request.onreadystatechange更改时都会调用request.readyState

缺点是在XMLHttpRequest对象等待答案(或最终超时)的过程中,UI可能会在短时间内无响应。