getJSON 只响应明文,否则不能工作?
Posted
技术标签:
【中文标题】getJSON 只响应明文,否则不能工作?【英文标题】:getJSON only responds to plaintext and will not work otherwise? 【发布时间】: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 并且它是空的。 【参考方案1】:您不能从 javascript 调用其他域(原始域除外)。如果 EXTERNALHOSTNAME
支持 jsonp 响应,您可以通过在查询中添加 &callback=?
来解决您的问题。如果不是,您可以在您的服务器上放置一个脚本来路由该响应,以便它显示为来自您自己的域。除此之外,如果您可以提供来自 EXTERNALHOSTNAME
的页面(我对此表示怀疑),您可以从执行此 ajax 调用的域中提供一个 iframe(这样它就不会违反同源规则),然后将该数据走私到父框架。
【讨论】:
以上是关于getJSON 只响应明文,否则不能工作?的主要内容,如果未能解决你的问题,请参考以下文章
jQuery $.ajax 函数可以工作,但像 $.get/$.getJSON 这样的速记函数不能——使用 jQuery 1.7.2 和 Grails 2.1 和 twitter bootstrap
$.getJSON 停止在谷歌地图 api distancematrix 中工作