3

网页:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>xhr</title>
</head>
<body>
    <script>
        var xhr_test = new XMLHttpRequest();
        xhr_test.open("GET","xhrtest",true);
        xhr_test.send();
        alert(xhr_test.responseText);
    </script>
</body>
</html>

main.py 文件:

import webapp2
from handlers import cookies,pages
application = webapp2.WSGIApplication([
        ('/xhr',pages.XHR),
        ('/xhrtest', cookies.XHRTest)
        ],
            debug=True)

请求处理程序:

class XHRTest(webapp2.RequestHandler):
    def get(self):
        self.response.write('0')

和,

class XHR(webapp2.RequestHandler):
    def get(self):
        f = open('static/html/xhr.html','r')
        self.response.write(f.read())

现在,当我点击 url 时localhost:8080/xhrtest,浏览器会立即将响应显示0为页面内容。

localhost:8080/xhr点击间接命中的url ,/xhrtest在alert框中弹出一个空字符串(responseText是一个空字符串),但是在network选项卡下检查chrome的响应选项卡,我可以看到请求的响应是0

那么为什么xhr_test.responseText不能显示相同的响应呢?

4

1 回答 1

7

send 调用是异步的(您已将 'async' 参数设置为 true),这意味着您的警报会在请求完成之前立即发生。您应该添加一个事件侦听器xhr.onreadystatechange并在其中使用响应。

将“真”更改为“假”将使这个简单的示例工作,但在一般情况下不是一个好主意。

Ajax 上的MDN 页面解释了如何使用 XMLHttpRequest。

于 2013-10-23T18:37:52.173 回答