AJAX-вызов с использованием Enyo Framework

Я пытаюсь сделать ajax-вызов, используя структуру enyo, и я столкнулся с проблемой. Сообщение об ошибке, которое я получаю, равно 0. Это просто 0. Я убедился, что моя ссылка на файл json верна, и я создал этот jsfiddle, чтобы проверить его http://jsfiddle.net/mmahon512/CPU8n/2/ Будем очень признательны за любую помощь. Мой хост — GoDaddy, и я убедился, что правильно добавил расширение json в свою веб-конфигурацию. Ссылка на файл 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()); }

});


person jetstreamin    schedule 28.04.2014    source источник


Ответы (1)


Похоже на проблему CORS. В консоли вижу следующее:

В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Таким образом, доступ к происхождению fiddle.jshell.net запрещен.

Я успешно завернул его как запрос jsonp.

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

});

Если вы запускаете это на том же сервере в prod, вы не увидите ошибку (поскольку это не кросс-происхождение). Если это будет на другом сервере, вы можете преобразовать серверную часть для поддержки jsonp или добавить соответствующие заголовки CORS< /а>.

person ryanjduffy    schedule 28.04.2014