Запрос Json с YQL и MooTools

Я работаю с некоторыми файлами json в другом домене, поэтому я пытаюсь сделать междоменный запрос, используя YQL в качестве прокси. Я новичок в javascript и веб-технологиях, и каждая строка кода, которую я пишу, могла бы быть намного лучше, но пока это не проблема, если код, который я пишу с вашей помощью, не такой элегантный.

На данный момент мой код:

function GetUrl() {
    var link = "http://m.airpim.com/json/public/search?q=variabile&k=&e=1",
        name = document.id('s').get('value') || '*';

    return link.replace("variabile", name);
}

function Ricerca() {
    var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from json where url="' + GetUrl() + '"') + '&format=json&diagnostics=false&callback=';
    return yql;
}

function LavoroJson() {
    var ciao = new Request.JSONP({
        url: Ricerca(),
        onComplete: function(data) {
            // Log the result to console for inspection
            alert(ciao.toSource());
        }
    }).send();
}

По моей идее я должен сделать запрос json с помощью YQL, но это не работает. Как мне это сделать?


person Gabriel Butoeru    schedule 03.07.2012    source источник


Ответы (1)


Вы можете несколько расширить класс Request.JSONP.

Request.YQLJSON = new Class({
    // gets basic info such as country and latitude data
    Extends: Request.JSONP,

    options: {
        log: !true,
        url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%3D%22{location}%22&format=json"
    },

    initialize: function(location, options) {
        this.parent(options);
        if (!location)
            return;

        this.options.url = this.options.url.substitute({location: encodeURIComponent(location)});
    },

    success: function(data, script) {
        this.parent(data, script);
    }
});

и вы можете сделать свою собственную DSL-подобную реализацию для деталей airpim:

Request.airpim = new Class({

    Extends: Request.YQLJSON,

    options: {
        suburl: "http://m.airpim.com/json/public/search?q={search}&k=&e=1"
    },

    initialize: function(query, options) {
        this.parent(this.options.suburl.substitute({
            search: encodeURIComponent(query)
        }), options);
    }

});

используйте так:

new Request.airpim("*", {
    onSuccess: function(data) {
        console.log(data.query.results.json);
    }
}).send();

https://tinker.io/c9634

person Dimitar Christoff    schedule 03.07.2012