2011-12-14 252 views
1

我有一个包含所有json格式的url。如何从url解析json

http://api.musixmatch.com/ws/1.1/track.lyrics.get?apikey=d34fb59a16877bd1c540aa472491825b&track_id=12414632

function load() { 
    dashcode.setupParts(); 
    var link = 'http://api.musixmatch.com/ws/1.1/track.search?apikey=d34fb59a16877bd1c540aa472491825b&q_track=back%20to%20december&page_size=10'; 
    req.open = ("GET", link, false); 
    req.onreadystatechange = readXML(); 
    req.send(null); 
} 

function readXML(){ 
    alert(req.responseText); 
} 

验证码一直在说空所有的时间。 有没有什么办法可以检索那些json文本

+1

我看不到任何JSON在你的代码 – 2011-12-14 15:45:35

+1

格式化代码正确帮助其他人了解你的问题。你的问题是:你直接调用`readXML`,并将它的返回值赋给`onreadystatechange`而不是函数本身。另外请注意,您不能简单地向第三方域发送请求。您必须使用服务器必须支持的JSONP。 – 2011-12-14 15:45:45

回答

2

问题出在req.onreadystatechange = readXML();。您正在分配函数的结果而不是函数本身(作为回调函数)。您需要req.onreadystatechange = readXML;。虽然我必须说我不确定这个代码应该如何工作。不是根据XHR是如何制造的,也不是关于外部领域。

1

正确的用法如下。您可以查看此链接http://jsfiddle.net/UH4KY/1/由于不允许跨域脚本,因此链接将会提示未定义。您可以设置Access-Control-Allow-Origin并测试代码。 函数readXML(req){ alert(req); }

function load() { 
    var xmlhttp; 
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else { // code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    var link = 'http://api.musixmatch.com/ws/1.1/track.search?apikey=d34fb59a16877bd1c540aa472491825b&q_track=back%20to%20december&page_size=10'; 

    //req.open = ("GET", link, false); 
    xmlhttp.onreadystatechange = function(){ alert(xmlhttp.responseText); } 
    xmlhttp.open("GET", link, false); 
    xmlhttp.send(null); 
}