Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Ajax 返回变量时,文本未定义_Ajax - Fatal编程技术网

Ajax 返回变量时,文本未定义

Ajax 返回变量时,文本未定义,ajax,Ajax,我不确定这个问题是否与Ajax有关,或者与JavaScript的某些愚蠢之处有关,而我通常忽略了这些问题,但我有下面的脚本,其中fox.html只是纯文本,上面写着:“敏捷的棕色狐狸跳过了懒狗。” 上面的脚本可以很好地提醒fox.html onload的内容。但是,如果我更改脚本以便: { fox = xmlhttp.responseText; alert(fox); } 变成: { fox = xmlhttp.responseText; return fox; } 和警报(loadXMLD

我不确定这个问题是否与Ajax有关,或者与JavaScript的某些愚蠢之处有关,而我通常忽略了这些问题,但我有下面的脚本,其中fox.html只是纯文本,上面写着:“敏捷的棕色狐狸跳过了懒狗。”

上面的脚本可以很好地提醒fox.html onload的内容。但是,如果我更改脚本以便:

{
fox = xmlhttp.responseText;
alert(fox);
}
变成:

{
fox = xmlhttp.responseText;
return fox;
}
和警报(loadXMLDoc());onload我得到“未定义”


我想知道为什么会这样。

因为返回值在
xmlhttp.onreadystatechange
函数的范围内,而不是在loadXML函数的范围内。异步请求就是这样工作的,它们在后台运行,而代码已经在继续。当请求完成时,它调用一个函数,该函数通常在
onreadystatechange
上设置

这么快的例子;在FunctionA中启动XMLHTTP请求,该请求在完成时调用
onreadystatechange
函数,该函数使用responseText调用函数B


如果您想让代码等待响应,则需要使用同步请求-但是,这样做会使整个浏览器暂停,直到请求完成。因此,最好将您的代码调整为我在第一段中编写的代码

AJAX是异步的。因此,对警报的调用(loadXMLDoc())实际上没有返回任何内容

xmlhttp.onreadystatechange=function()
  {
  ...
  }
这将创建一个新函数并将其附加到xmlHTTP对象。当状态更改(触发事件)时,将执行此函数。它不会在loadXMLDoc()运行期间执行,而是在将来的某个时间执行。这样做是为了在web应用程序中保持可用性(事情不是等待完成)

从AJAX请求返回的数据必须在您创建的这个新函数中执行。您应该使用返回的信息更新页面的必要部分。它不能返回任何数据,实际上它可以返回它想要的所有数据,但是对这些信息什么也做不了

您还可以在其他地方定义新函数,并通过执行以下操作将其附加到
onreadystatechange
事件处理程序:

function handler() { ... }

xhmlhttp.onreadystatechange = handler;

谢谢你的解释。但是,我不确定您将我的代码调整为您在第一段中编写的代码是什么意思。您在第一段中写了什么?他的意思是更改您创建并附加到
onreadystatechange
事件侦听器的函数,以处理返回的XML而不返回它。@Matt Ah得到了它。就像在我最初的示例中,我提醒响应而不是返回响应(显然做的不仅仅是提醒)。谢谢。嗯,我不确定我是否完全听懂了。您是说loadXMLDoc()在onreadystatechange函数执行之前完成,因为它设置为在客户端收到浏览器的响应后启动?但是,如何将onreadystatechange函数作为目标来返回值。。。或者在这种情况下这是不可能的,我只能让值更新页面上的某个内容,比如div?后面的语句是正确的,处理函数需要处理返回的数据。当涉及到范围时,可以说这是完全独立的。它包含从XML请求接收到的数据,以及对页面全局的所有内容,但仅此而已。是的,
loadXMLDoc()
将在ajax完成之前返回<就JS而言,code>.statechange=handler与
var a=5
没有什么不同,因此没有实际的处理过程。感谢您的澄清!
function handler() { ... }

xhmlhttp.onreadystatechange = handler;