Question

I am trying to make an ajax call using the enyo framework and I am running headlong in to a problem. The error message I am getting is 0. That's it just a 0. I made sure my link to the json file was correct and I built this jsfiddle to test it out http://jsfiddle.net/mmahon512/CPU8n/2/ Any help is greatly appreciated. My host is GoDaddy and I made sure that I added the json extension to my web config correctly. The link to the json file is correct and it returns valid json. I checked it using jsonlint. Here is what the code looks like on 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()); }

});

Was it helpful?

Solution

Looks like a CORS issue. I see the following in the console:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin fiddle.jshell.net is therefore not allowed access.

I wrapped it as a jsonp request successfully.

http://jsfiddle.net/CPU8n/3/

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());
    }

});

If you're running this on the same server in prod, you wouldn't see the error (since it's not cross-origin). If it'll be on a different server, you can either convert the server-side to support jsonp or adds the appropriate CORS headers.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top