3

jquery、.ajax、および jsonp を使用してクロスドメイン ajax 呼び出しを行うことができることを理解しています。私はyahooの株価情報APIを呼び出しています。すべてが機能しており、結果が返されています (Fiddler を使用して確認できます)。問題は、yahoo is undefined という js エラーが発生することです。JSONはコールバック関数内でフォーマットされているため、json構文が正しくないため、問題があると思います。修正するにはどうすればよいですか? ありがとう!コードは次のとおりです。

     $.ajax({
            type: 'GET',
            dataType: 'jsonp',
            jsonp: 'callback',
            jsonpCallback: 'YAHOO.Finance.SymbolSuggest.ssCallback',
            data:{
                query: request.term
            },
            url: 'http://autoc.finance.yahoo.com/autoc',
            success: function (data) {
                alert("yes");
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
                alert(thrownError);
            }
        });
4

5 に答える 5

4

これが私がそれを機能させる方法です:

URLパラメーターを指定する必要があるため、.jsonpの代わりに.ajaxを使用しました。また、コードで Yahoo コールバック関数の名前を定義する必要があります。これは、Web サービスで Yahoo コールバック機能を使用する方法を説明するリンクです。

http://developer.yahoo.com/javascript/json.html#callbackparam

コードは次のとおりです。

<script type="text/javascript">
    // this variable must be defined this way
    var YAHOO = {
        Finance: {
            SymbolSuggest: {}
        }
    };

    $(document).ready(function(){           
        var query;

        query = 'Yahoo';        
        if (query.length > 0)
        {

          $.ajax({
              type: "GET",
              url: "http://d.yimg.com/autoc.finance.yahoo.com/autoc",
              data: {query: query},
              dataType: "jsonp",
              jsonp : "callback",
              jsonpCallback: "YAHOO.Finance.SymbolSuggest.ssCallback",
          });
          // call back function
          YAHOO.Finance.SymbolSuggest.ssCallback = function (data) {
            alert(JSON.stringify(data));
          }
        }

    }); 


    </script>   
于 2011-08-15T22:42:17.403 に答える
0

これが実際の例です: callback=? を参照してください。それを機能させるために私のクエリの最後に。この例は、スタンドアロンの html として過去にコピーできます。

https://github.com/cirs/PortfolioApp/blob/master/PortfolioApp-Step1-GetData.html

于 2011-07-04T04:04:38.840 に答える
0

これが私のために働いた修正版です:

$(document).ready(function() {
    $.ajax({
        url: "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22AAPL%22)%0A%09%09&format=json&diagnostics=true&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=quote",
        dataType: "jsonp"
    });

    window.quote = function(data) {
        console.log(data);
    };
});
于 2015-01-25T11:00:28.113 に答える