1

以下代码不起作用,并且没有返回正确的结果。

function test(file) {
 var uri = "http://localhost/test.php";
 var xhr = new XMLHttpRequest();
 var result="done";
 xhr.open("POST", uri, true);
 xhr.send();
 xhr.onloadend=function()
  {
   result=xhr.responseText;
   return result;
  }
} 

从事件处理程序返回是错误的还是只是将结果返回给测试函数?

4

2 回答 2

1

正如您所做的那样,在事件处理程序中返回不会将结果返回到调用范围。您用于附加侦听器的 DOM 事件函数忽略返回值。如果您尝试从 onload 访问结果,则需要在回调中这样做

function test(file, callback){
    var uri = "http://localhost/test.php";  
    var xhr = new XMLHttpRequest();  
    xhr.open("POST", uri, true);  
    xhr.send(formdata);
    xhr.onload=function(){
        callback(xhr.responseText);
    }
}
于 2012-06-01T09:28:04.537 回答
0

从事件处理程序返回是可以的,但是您的返回值并没有达到您显然认为的位置。在大多数情况下,事件处理程序应该只返回trueor false,这表明您是否要禁用默认行为(false意思是“抑制此事件的默认行为”)。不可能在函数中或作为函数的返回值接收onloadend处理程序的返回值,因为事件处理程序是在函数已经返回时异步执行的。test()test()

于 2012-06-01T09:29:05.067 回答