Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php AJAX请求返回';未定义';_Php_Javascript_Ajax_Request_Undefined - Fatal编程技术网

Php AJAX请求返回';未定义';

Php AJAX请求返回';未定义';,php,javascript,ajax,request,undefined,Php,Javascript,Ajax,Request,Undefined,由于某种原因,如果我返回值,我总是会收到未定义的,但如果我试图在警报中显示它,我会收到php值 function getXMLHttp() { var xmlHttp try { //Firefox, Opera 8.0+, Safari xmlHttp = new XMLHttpRequest(); } catch(e) { //Internet Explorer try { xmlHttp = new ActiveXObject("

由于某种原因,如果我返回值,我总是会收到
未定义的
,但如果我试图在警报中显示它,我会收到php值


function getXMLHttp() {
  var xmlHttp

  try {
    //Firefox, Opera 8.0+, Safari
    xmlHttp = new XMLHttpRequest();
  } catch(e) {
    //Internet Explorer
    try {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        //Browser does not support AJAX
        return false;
      }
    }
  }

  return xmlHttp;
}
编辑:


function handleResponse(response) {
    return response.toString();
}

谢谢


Guy Dor

看起来您正试图读取此函数的返回值:

function isUsernameExists() {
xmlHttp.onreadystatechange = function() {
它没有
return
语句,因此它总是
未定义的

我猜您希望这个return语句传递您想要的值:

return xmlHttp.responseText.toString();
但这是该功能的一部分:

function isUsernameExists() {
xmlHttp.onreadystatechange = function() {
当readystatechange事件触发时自动调用,而不是通过任何函数调用调用


异步JavaScript和XML很少使用XML,但是异步的要对提取的数据执行任何操作,都需要通过分配给onreadystatechange的回调函数来执行。它可以调用其他函数,但它不能返回任何内容(至少不会返回任何有用的内容)。

我们看不到足够多的代码来完全了解情况,但是,您正在处理一个异步操作,传递该异步操作结果的唯一方法是使用从该操作获得的值调用函数。您不能仅从函数返回


这是一个常见的误解(我今天第六次回答这个问题)。任何代码都不会调用have上用于就绪状态更改的函数。当ajax调用完成时,浏览器会在内部调用它。这意味着从该函数返回值将不会起任何作用,并且肯定不会将该结果传达给任何代码。如果您希望将该结果传递给某些代码,那么您需要从该函数内部调用某些代码,并将所需结果传递给它,以便代码可以对其进行操作。这会中断正常的编程流程,但在处理异步操作时是必需的。

您在此处创建的函数中有一个return语句

xmlHttp.onreadystatechange = function() {
但是函数中没有return语句

function isUsernameExists() {
在另一个函数中创建函数并不意味着该函数中的代码可以运行

在从服务器收到响应之前,您创建的函数中的代码不会运行,此时创建第二个函数的原始函数将已完成执行


代码不会停止等待服务器的响应,而是继续运行并完成执行。您为处理来自服务器的响应而创建的函数将在稍后收到响应时运行。

添加了另一个函数-HandlerResponse,该函数将其转换为字符串,然后将其返回给
xmlHttp.onreadystatechange
处理程序,该处理程序对其不做任何处理,因此到达函数的末尾,变量就不在范围内了。别再回来了。实际上,要处理数据,不要试图将其传回。这表明Javascript创建中的设计很糟糕。@Dispendent Rage-不,不是。你不必做异步请求,它们只是更好。作为一个有报酬和指导的人,是的,我做了。我还必须返回数据(不能写入HTML),这样就没用了。@Guy Dor您似乎不了解函数及其返回值是如何工作的。handleResponse(xmlHttp.responseText);甚至不在任何地方返回值。仔细阅读。