Ajax上传无法处理JSON响应或弹出下载弹窗。

3
我正在使用Andris Valums的AJAX插件: 它很好用,但是我无法发送正确的JSON响应。我在发送JSON编码响应之前设置了头部为'Content-Type','application/json',并且在插件中指定了我期望的JSON:

responseType: "json",

这会弹出一个下载提示框,要求下载JSON/RESPONSE文件。奇怪的是,当我没有将正确的“Content-Type”添加到我的响应中时,它可以正常工作。
当然,我想传递正确的响应类型,因为我所有的jQuery 1.4调用都依赖于正确的JSON。
是否有其他人遇到过同样的问题,或者有人愿意尝试一下?
我很想使用这个插件,但只有当我能够返回带有正确内容类型的正确JSON时才行。
3个回答

3

您不必指定application/json作为响应Content-Type。

您可以使用Content-Type:text/plain并使用eval('(' + response + ')')函数对响应进行评估,并将其分配给JavaScript变量。

Damon提供的示例更详细地解释了它。

您可能还想检查以下内容:

  • 确保在发送任何输出之前发送您的标头
  • 确保您的响应是有效的JSON编码字符串

谢谢,但我有同样的问题:我不想使用eval(),有其他方法可以获取JSON格式的响应吗?我应该在这里使用解析器吗? - Jorre

1
插件会在您提供的按钮上方创建一个不可见的文件输入框,所以当用户单击您的按钮时,正常的文件选择窗口就会出现。当用户选择了一个文件之后,插件会将包含文件输入的表单提交到一个 iframe 中。因此,它不是真正的 Ajax 上传,但提供了同样的用户体验。
由于该插件不是真正的 Ajax,并且您设置了内容类型为 application/json,因此您将得到唯一的响应是文件下载对话框。
我唯一能想到的方法是删除您设置的内容类型并在 JavaScript 中使用类似以下代码:
var jsonObj = eval('(' + response + ')');

我几天前使用了上述方法,使用了同样的插件。


在这个插件中,有没有比使用eval()更好的方法? - Jorre

0

我也遇到了同样的问题,而且我认为除了json之外发送任何其他方法都没有帮助...

我认为这与iframe内容被解释为响应字符串的方法有关,在将其eval()为JSON对象之前。

似乎如果服务器返回的json_encode()字符串包含带引号的HTML(\"),则ajaxupload使用的字符串会在某种程度上转义后进行评估,从而破坏JSON对象。

但是我还没有找到解决方法 :(


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接