我正在尝试使用enyo框架进行ajax调用,并且我正在努力解决问题。我得到的错误消息是0.这只是一个0.我确保我的json文件的链接是正确的,我建立了这个jsfiddle来测试它http://jsfiddle.net/mmahon512/CPU8n/2/任何帮助非常感谢。我的主机是GoDaddy,我确保我正确地将json扩展名添加到我的web配置中。 json文件的链接是正确的,它返回有效的json。我用jsonlint检查了它。以下是jsfiddle的代码:
enyo.kind({
name: "AjaxSample",
components: [
{ kind: "Button", content: "Fetch Users", ontap: "fetch" },
{ name: "repos", content: "Not loaded...", allowHtml: true }
],
fetch: function() {
var ajax = new enyo.Ajax({
url: "http://atxapps.com/_sites/atxapps.com/dev/jetstream/assets/dataUsers.json"
});
ajax.go();
ajax.response(this, "gotResponse");
ajax.error(this, this.gotError);
},
gotResponse: function(inSender, inResponse) {
var output = "";
for(i = 0; i < inResponse.length; i++) {
output += inResponse[i].Id + "
";
}
output += Date.now();
this.$.repos.setContent(output);
},
gotError: function(inSender, inError) {
alert(inError);
this.$.repos.setContent(inError + " " + Date.now());
}
});
答案 0 :(得分:3)
看起来像是一个CORS问题。我在控制台中看到以下内容:
请求的资源上没有“Access-Control-Allow-Origin”标头。因此不允许来源fiddle.jshell.net访问。
我成功地将其包装为jsonp请求。
enyo.kind({
name: "AjaxSample",
components: [
{ kind: "Button", content: "Fetch Users", ontap: "fetch" },
{ name: "repos", content: "Not loaded...", allowHtml: true }
],
fetch: function() {
var ajax = new enyo.JsonpRequest({
url: "http://jsonpwrapper.com/?urls%5B%5D=http%3A%2F%2Fatxapps.com%2F_sites%2Fatxapps.com%2Fdev%2Fjetstream%2Fassets%2FdataUsers.json"
});
ajax.go();
ajax.response(this, "gotResponse");
ajax.error(this, this.gotError);
},
gotResponse: function(inSender, inResponse) {
var output = "";
var body = enyo.json.parse(inResponse[0].body); // jsonpwrapper.com wraps the results in a array with an index for each URL. The actual data is in the body param of that index but it isn't parsed (at least in this example)
for(i = 0; i < body.length; i++) {
output += body[i].Id + "<br />";
}
output += Date.now();
this.$.repos.setContent(output);
},
gotError: function(inSender, inError) {
alert(inError);
this.$.repos.setContent(inError + " " + Date.now());
}
});
如果你在prod中的同一台服务器上运行它,你就不会看到错误(因为它不是跨源的)。如果它位于不同的服务器上,您可以将服务器端转换为支持jsonp或adds the appropriate CORS headers。