【问题标题】:getJSON only responds to plaintext and will not work otherwise?getJSON 只响应明文,否则不能工作?
【发布时间】:2011-12-06 08:31:12
【问题描述】:

我正在使用 $getJSON 从链接中提取 JSON 字符串(例如 /login?user=foo&pass=bar)。当我将此链接直接插入浏览器时,我会收到“文件下载”提示(“这是一个:应用程序/json”)。 getJSON 不适用于该链接。

但是!当我在记事本的“文件下载”提示中打开文件并将该文本作为纯文本(.txt 文件)托管到我的服务器上并在该链接(即 /jsondata.txt)上调用 getJSON 时,它可以完美运行。

请记住,我无法在后端更改任何内容。

知道这里发生了什么吗?基本上,当我将 JSON 文件作为纯文本托管时,我可以将其拉下,但默认情况下不会返回。

编辑 这是我的代码...非常简单:

  $.getJSON("http://EXTERNALHOSTNAME.com/WEBSERVICE.svc/login?username="+document.frmLogin.email.value+"&password="+document.frmLogin.password.value+"", function(data) {

alert("it worked!");
});

如果我将该行替换为 .txt 保管箱文件的链接,它会起作用:

//$.getJSON("http://dl.dropbox.com/u/NUMBERS/login.txt", function(data) {

【问题讨论】:

  • 你能发布你的getJSON代码吗?
  • 我想这已经回答了here
  • “不起作用”是什么意思?你能提供确切的错误吗?该链接是在同一个域上还是在不同的域上(因为我怀疑问题可能出在其他地方)?此外,如果您获得文件下载,则链接可能带有“内容处置”标头support.microsoft.com/kb/260519。我不知道 $.getJson 在这种情况下的表现如何。
  • 查看上面的 edit 我不确定抛出了什么错误(我怎样才能找到?)。我只知道,如果我用包含数据的 .txt 文件替换链接,它就可以正常工作。真正的链接本身没有文件扩展名,但(从记事本或写字板的下载提示打开时)显示相同的数据。
  • PPvG,我也试过了(在网上其他地方看到过)。当我放入适当的 URL 并将“{}”放在“数据:”元素旁边时,它会被扔到 AJAX 错误回调中。我在警报窗口中打印 xhr.responseText 并且它是空的。

标签: javascript jquery ajax json


【解决方案1】:

您不能从 javascript 调用其他域(原始域除外)。如果 EXTERNALHOSTNAME 支持 jsonp 响应,您可以通过在查询中添加 &callback=? 来解决您的问题。如果不是,您可以在您的服务器上放置一个脚本来路由该响应,以便它显示为来自您自己的域。除此之外,如果您可以提供来自 EXTERNALHOSTNAME 的页面(我对此表示怀疑),您可以从执行此 ajax 调用的域中提供一个 iframe(这样它就不会违反同源规则),然后将该数据走私到父框架。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多