2012-07-03 70 views
2

我正在使用另一個域上的一些json文件,所以我試圖使用YQL作爲代理進行crooss域請求。我是一個初學JavaScript和Web技術的人,我寫的每一行代碼都可以更好,但是現在如果我用你的幫助編寫的代碼不是那麼優雅的話,這不是問題。使用YQL和MooTools的Json請求

現在我的代碼是:

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

在我的想法,我應該做的使用YQL的JSON的請求,但它不工作。我該怎麼做?

回答

2

您可以稍微擴展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