Javascript jQuery响应在浏览器中为空,但curl可以工作

Javascript jQuery响应在浏览器中为空,但curl可以工作,javascript,jquery,django,json,Javascript,Jquery,Django,Json,我使用jQuery的.ajax()调用服务器(实际上是本地Django runserver)并获得响应 在服务器控制台上,我可以看到JSON请求进入,做出了正确的JSON响应,一切看起来都正常 但在我的浏览器中(在Firefox 3.6和Safari 4.0.4上进行了测试,我使用的是jQuery 1.4.2),响应正文似乎是空的(响应代码是200,否则标题看起来可以) 通过测试命令行的响应,我得到了预期的答案 $curl--data“text=test&user\u name=testy&us

我使用jQuery的
.ajax()
调用服务器(实际上是本地Django runserver)并获得响应

在服务器控制台上,我可以看到JSON请求进入,做出了正确的JSON响应,一切看起来都正常

但在我的浏览器中(在Firefox 3.6和Safari 4.0.4上进行了测试,我使用的是jQuery 1.4.2),响应正文似乎是空的(响应代码是200,否则标题看起来可以)

通过测试命令行的响应,我得到了预期的答案

$curl--data“text=test&user\u name=testy&user\u location=testyville&site=http%3A%2F%2folocalhost%3a888%2Fcs%2Fjavascript\u answer\u form.html&email\u address=“
{“answer_permalink”:“answer_id”:16,“问题文本”:“你年轻时天空是什么样子的?”,“answer_text”:“测试”,“问题id”:“1”}

我是从本地机器上的HTML文件发出请求的,而web浏览器没有提供该请求。它只是使用
文件://
进行寻址。django服务器也是本地的,默认位置为127.0.0.1:8000

谢谢你的建议


-Jim

除非您特别允许浏览器对本地文件进行备用设置,否则所有内容都受跨域安全策略的约束。不在域上的文件(如
localhost
)不能从该域请求文件


我不确定跨域策略如何处理端口;您可以将此文件放在port-80-accessible
localhost
文件夹(如果有)中并完成工作。否则,您将陷入困境,除非您可以更改浏览器设置以产生异常(即使这样,我也不确定这在任何标准浏览器中都是可行的)。

添加一个“error:function(data){alert(data);}”以查看您的$.ajax是否失败。

在.ajax()调用中将“complete”更改为“success”complete'用于在ajax操作完成但不提供响应数据时发出信号success'通过成功的请求调用并接收响应“错误”是“成功”的对应项,用于错误处理


我认为浏览器(至少有些浏览器,比如Safari,对我来说)根据同源策略将文件系统外提供的文件视为可信源。因此,这在这里被证明是一个危险的问题。

您的jQuery看起来像什么?下面是我用来发出请求的页面:jQuery.ajax()调用是否在浏览器的控制台中工作?还可以尝试抛出一行
import pdb;pdb.set_trace()
。好的,所以当我将脚本放在Django runserver中的静态媒体目录中时,响应会起作用!问题是,发布总是有效的。只有响应是空白的、跨域的,并且仅适用于某些客户端(记住
curl
worked)。如果这是跨域安全模型的一部分,我真的不明白。允许我跨域发送数据,但不接收响应,似乎不是防止人们陷入麻烦的最佳方式。再说一次,我对前端编码还不熟悉,所以请随意证明我错了。你是对的——这没有什么意义。(我要指出,
curl
不受跨域策略的影响,因为它不在任何域上。)当然,通过AJAX进行跨站点通信的真正危险是数据访问;通过CSRF自动发送请求很容易通过其他方式实现(例如图像标签、带有自动提交表单的iframe),因此无论如何,应在不同的级别上实施针对类似攻击的保护。