0

getJSON と YQL を使用して YAHOO データを解析しようとしています

接続は正常に機能し、表示してコンソールに記録できるデータを取得しますが、使用している JSP ページにデータを出力できません。ここで受け入れられた回答を使用しました:

http://jsbin.com/umuri5/1/edit

ほとんど成功していません。ここに私のJSPがあります:

<%@page import="p.build.classes.p.*"%>

<!DOCTYPE JSP>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>untitled</title>
<style type="text/css">
    body { text-align: center; }
</style>
</head>
<body onLoad="gova();">

<div id="container">

</div>
<table id="userdata" border="1">
    <thead>
        <th>Change</th>
    </thead>
    <tbody></tbody>
</table>

<script id="userTemplate" type="text/x-jquery-tmpl">
    <tr>
        <td>${Change}</td>
    </tr>
</script>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"    type="text/javascript" charset="utf-8"></script>   
<script src="https://raw.github.com/jquery/jquery-tmpl/master/jquery.tmpl.min.js" type="text/javascript" charset="utf-8"></script> 
<script src="scripts/script.js"></script>
<script type="text/javascript">
function gova() {
requestCrossDomainJSON(
    'yahoo.finance.quote',
    function(results) {
        var i, t = $('#userTemplate'), tbody = $('#userdata tbody');
      // console.log(data.query.results);

        for (var i = 0; i < results.userdata.length; i++) {
            t.tmpl(results.userdata[i]).appendTo(tbody);
        }
    }
);
return false;
}
</script>
</body>
</html>

これが私のスクリプトscript.jsです。

function requestCrossDomainJSON( site, callback ) {  


  if ( !site ) {  
    alert('No site was passed.');  
    return false;  
  }  


var yql = 'http://query.yahooapis.com/v1/public/yql?q=select%20Change%20from%20' + site + '%20where%20symbol%20in%20(%22YHOO%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=?';  

// Request that YSQL string, and run a callback function.  
// Pass a defined function to prevent cache-busting.

function cbfunc(data) {
    console.log(data);
      // If we have something to work with...
      if ( ! data.error && data.query.results) {
          // 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.query.results.json);

          }

      }
      // Else, Maybe we requested a site that doesn't exist, and nothing returned.
      else throw new Error('Nothing returned from getJSON.');

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

 //    console.log(data.query.results);


 };

エラーは次の行で発生します。

        for (var i = 0; i < results.userdata.length; i++) {
            t.tmpl(results.userdata[i]).appendTo(tbody);
        }

コンソールは、未定義のプロパティユーザーデータを読み取ることができないと言っています。JQuery テンプレートは減価償却されているため、このデータを自分のページに取得するためのより良い方法を使用する必要がありますか?これがまだ問題の有効な解決策である場合、呼び出された JSON が定義されていない場合、どのように結果を参照すればよいですか機能提供。JSP の代わりに HTML ファイルも使用してみました。

前もって感謝します。

4

1 に答える 1

1

リクエストを行っている URL からresults返されるレスポンスの一部:

results: {
     quote: {
          Change: "-0.061"
     }
}

これを期待していますか?

その場合は、コールバックに渡そうとする代わりにdata.query.results['quote']['Change']orを取得してから調べる必要があります。data.query.results.quote.Changedata.query.results.jsonresults.userdata

于 2013-04-01T05:57:23.080 に答える