我正在努力解决一个看似简单的问题。 我有一个json数据存储为某个服务器上的纯文本文件,我需要在javascript中加载它。我收到错误
XMLHttpRequest无法加载http://www.cgarea.com/ary_telemetry/messages.json。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://fiddle.jshell.net”访问。
我正在阅读关于CORS并测试不同解决方案但没有成功。 如果目标URL是PHP脚本,我可以设置一个标题('Access-Control-Allow-Origin:*'),但它只是一个文本文件。 我怎么加载这个?我是否需要创建一个小的PHP脚本 返回文件内容?
我在http://jsfiddle.net/rt6jj5tv/6/
上添加了最少的代码感谢任何提示,谢谢。
JS代码:
function GetMessages()
{
//$.getJSON("http://www.cgarea.com/messages.json", GetMessagesCB);
$.ajax({
type: 'GET',
url: "http://www.cgarea.com/messages.json",
dataType: "text/plain",
success: GetMessagesCB
});
}
function GetMessagesCB(data)
{
console.debug(data);
var ui = document.getElementById("Message");
ui.innerHTML = data;
}
GetMessages();
答案 0 :(得分:1)
正如您所提到的,您需要运行JSONP或CORS代理,以便通过另一个域的AJAX检索文本文件。这是浏览器内置的安全机制。
您可以为自己的PHP脚本添加标题以实现此目的。另一种可能的方法是use YQL。
代码:
function GetMessages()
{
$.getJSON("http://query.yahooapis.com/v1/public/yql",
{
q: "select * from json where url=\"http://www.cgarea.com/messages.json\"",
format: "json"
},
function (data) {
if (data.query.results) {
GetMessagesCB(data.query.results.json);
} else {
alert('bad');
}
}
);
}
function GetMessagesCB(data)
{
console.debug(data);
var ui = document.getElementById("Message");
ui.innerHTML = JSON.stringify(data);
}
GetMessages();
您的小提琴已更新:http://jsfiddle.net/rt6jj5tv/7/
答案 1 :(得分:0)
对不起,出于某种原因,我认为有PHP 那么,要完全回答您的问题,您需要在服务器端启用CORS。除非您拥有:http://www.cgarea.com/ary_telemetry/messages.json,除了联系拥有该网站的人之外,您所做的事情并不多。