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
Javascript 带有ajax请求的空响应正文_Javascript_Ajax_Google Chrome_Tornado - Fatal编程技术网

Javascript 带有ajax请求的空响应正文

Javascript 带有ajax请求的空响应正文,javascript,ajax,google-chrome,tornado,Javascript,Ajax,Google Chrome,Tornado,我正在向tornado服务器发送用户名和密码。如果凭据有效,它将返回一个cookie和一个简单的“OK”文本响应 这适用于普通的web客户机,但当我尝试使用ajax时,响应主体是空的。由于某种原因,Chrome会在请求完成之前取消该请求,firefox会以红色突出显示该请求,即使该请求的状态为200。我在想到底发生了什么 我已经设置了CORS头,我可以看到选项请求正在返回有效数据(chrome没有对此抱怨) 这是我的tornado服务器: class LoginHandler(BaseMixin

我正在向tornado服务器发送用户名和密码。如果凭据有效,它将返回一个cookie和一个简单的“OK”文本响应

这适用于普通的web客户机,但当我尝试使用ajax时,响应主体是空的。由于某种原因,Chrome会在请求完成之前取消该请求,firefox会以红色突出显示该请求,即使该请求的状态为200。我在想到底发生了什么

我已经设置了CORS头,我可以看到选项请求正在返回有效数据(chrome没有对此抱怨)

这是我的tornado服务器:

class LoginHandler(BaseMixin, tornado.web.RequestHandler):
    @gen.coroutine
    def options(self, *args, **kwargs):
        """
        Return CORS headers
        """
        self.set_header('Access-Control-Allow-Headers', 'origin, content-type, accept, authorization')
        self.set_header('Access-Control-Allow-Max-Age', 21600)
        self.set_header('Access-Control-Allow-Methods', 'HEAD, OPTIONS, GET, POST')
        self.set_header('Access-Control-Allow-Origin', '*')

    @gen.coroutine
    def post(self, *args, **kwargs):
        """
        Validates the user's ID and token
        """
        try:
            # ... perform checks - all OK, so then:
            self.set_secure_cookie(
                    "auth", urllib.urlencode({'user_id': self.user_id,
                                              'token': user['token']}))
            self.set_header("Content-Type", "text/plain")
            self.finish("OK")
            return
内容长度设置正确,但由于某些原因,firefox或chrome都不会显示响应正文

我假设这与CORS有关,因为我的行为测试都通过了(他们断言响应体包含“OK”)

我发出请求(使用angularjs)如下:

postData = new Array('user_id=' + id, 'token=' + token);

$http.post(url, postData.join('&'), {headers: {'Content-type': 'application/x-www-form-urlencoded'}})
   .success(authSuccessHandler)
   .error(authErrorHandler);
在chrome中,它会立即进入错误回调,并且在开发工具的网络选项卡中将请求标记为“挂起”,然后标记为“取消”


有人知道我做错了什么吗?

问题是CORS标题只在选项端点上,而不是POST上。我把它们添加到POST中,现在它都起作用了。

当您通过浏览器尝试时,它是否达到了<代码> POST <代码>函数?是的,Ajax请求成功地登录了用户,但是FF和Chrome不认为响应是有效的。由于某种原因,Chrome在发送后会中止。我需要他们接受返回的cookie。您能与我们共享您的客户端代码吗?url的值是多少?同样在Postman中,响应显示正确,没有错误。源URL为,目标为