2012-04-13 60 views
1

我有一個腳本在這裏,複製幾乎直接關閉this。爲什麼下面列出的代碼不返回任何內容?YQL JSON腳本不返回?

ajax.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
    "http://www.w3.org/TR/html4/strict.dtd"> 

<html dir="ltr" lang="en-US"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Cross-Domain Ajax Demo</title> 
    </head> 
    <body> 
     <div id="container"> 
      <form> 
       <p><label>Type a URL:</label><input type="text" name="sitename" id="sitename"/></p> 
       <p><input type="submit" name="submit" id="submit" value="Make Cross Domain Ajax request"</p> 
      </form> 
     </div> 

     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" charset="utf-8"></script> 
     <script type="text/javascript" src="cross-domain-requests.js"></script> 

     <script type="text/javascript"> 
      $('form').submit(function() { 
       var path = "www.google.com"; 
       requestCrossDomain(path, function(results) { 
        $('#container').html(results); 
       }); 
       return false; 
      }); 
     </script> 
    </body> 
</html> 

cross-domain-requests.js

// Accepts a URL and a callback function to run. 
function requestCrossDomain(site, callback) { 

    // If no URL was passed, exit. 
    if (!site) { 
     alert('No site was passed.'); 
     return false; 
    } 

    // Take the provided URL, and add it to a YQL query. Make sure you encode it! 
    var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from html where url="' + site + '"') + '&format=xml&callback=cbFunc'; 

    // Request that YSQL string, and run a callback function. 
    // Pass a defined function to prevent cache-busting. 
    $.getJSON(yql, cbFunc); 

    function cbFunc(data) { 
    // If we have something to work with... 
    if (data.results[0]) { 
     // Strip out all script tags, for security reasons. 
     // BE VERY CAREFUL. This helps, but we should do more. 
     data = data.results[0].replace(/<script[^>]*>[\s\S]*?<\/script>/gi, ''); 

     // If the user passed a callback, and it 
     // is a function, call it, and send through the data var. 
     if (typeof callback === 'function') { 
      callback(data); 
     } 
    } 
    // Else, maybe we requested a site that doesn't exist, and nothing returned. 
    else throw new Error('Nothing returned from getJSON.'); 
    } 
} 

(我是比較新的腳本和Ajax,所以我提前道歉,如果我做任何愚蠢的事)

回答

3

嘗試將var yql中的回調更改爲callback =?和選擇語句'從xml'是這樣的:

var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from xml where url="' + site + '"') + '&format=xml&callback=?'; 
+0

聖莫里它的工作原理,非常感謝。這節省了我幾個小時的睡眠時間,熬夜通宵地想知道爲什麼它不工作:D – Luke 2012-04-13 20:22:42

+0

很酷,我很高興它解決了。請將答案標記爲已接受,以結束此問題。 – 2012-04-13 20:26:20

+0

我必須再等一分鐘才能做到抱歉,我想我對於堆棧溢出來說太新了編輯:對不起,我的意思是在,它不會讓我標記爲答案 – Luke 2012-04-13 20:28:06