Django视图发送带有正确头部的空响应

1 投票
1 回答
550 浏览
提问于 2025-04-17 10:36

我在Dreamhost服务器上有一个Django项目,这个项目有几个视图会返回Json格式的响应。昨天,我把这个Django项目从本地机器(localhost)迁移到了运行Apache的Dreamhost服务器上。现在,当我通过jQuery调用我的Django视图,访问

http://www.abc.com/projects/

本来应该返回我在mongodb数据库中的所有项目,但结果却是:

在Firefox上 - 只返回了头部信息,没有响应内容。

Connection  Keep-Alive
Content-Type    application/json
Date    Thu, 19 Jan 2012 09:03:34 GMT
Keep-Alive  timeout=2, max=100
Server  Apache
Status  200 OK
Transfer-Encoding   chunked

在Chrome上 - 没有头部信息和响应数据,出现了一个错误:

XMLHttpRequest cannot load http://abc.com/Projects/. Origin null is not allowed by Access-Control-Allow-Origin.**

如果我直接通过网页浏览器访问http://www.abc.com/projects/,它会以json格式返回结果,但如果我使用JavaScript/jQuery就不行。

之前我在本地机器上使用了这个中间件,允许其他域名请求并获取响应,但现在在Apache服务器上运行时,这个中间件就不工作了,所以我把它从Settings.py文件中删除了。

我不知道为什么会出现这个错误。请帮帮我。

*编辑*

根据@burhan的建议,我在客户端使用了jsonp,现在我的服务器返回了json,但浏览器在解析之前就报错了。错误是:意外的标记。

我收到的JSON回复是:

{"projects": [{"projectName": "carmella", "projectId": "4f13c7475fcff30710000000"}, {"projectName": "SeaMonkey", "projectId": "4f1677b75fcff37c03000001"}]}

1 个回答

2

你遇到了一个叫做同源策略的问题。你的服务器是www.abc.com,而你访问的是abc.com,这两个地址不完全相同,所以你的脚本没有执行。

你有几个解决办法:

  1. 确保网址完全一致,这样就可以避免同源策略的问题。
  2. 在你的JavaScript库中使用jsonp

撰写回答