2012-02-08 55 views
2

我想讓jQuery自動完成,雅虎財務和Zend框架一起工作。jQuery自動完成和雅虎財務

我想要的是創建一個表單域,我可以通過Yahoo API自動完成代碼符號。

我已經創建了一個包含這一個Zend_From元素:

$this->setJQueryParam('source', new Zend_Json_Expr('function(request, response) { 
      $.ajax({ 
       type: "GET", 
       dataType: "jsonp", 
       jsonp: "callback", 
       jsonpCallback: "YAHOO.Finance.SymbolSuggest.ssCallback", 
       data: { 
        query: request.term 
       }, 
       cache: true, 
       url: "http://autoc.finance.yahoo.com/autoc"; 
       } 
      }); 
     }')); 
    $this->getView()->jQuery()->addJavascript('var YAHOO={Finance:{SymbolSuggest:{}}};'); 
    $this->getView()->jQuery()->addOnLoad('YAHOO.Finance.SymbolSuggest.ssCallback = function (data) { 
              console.log(JSON.stringify(data)); }'); 

我發現this post是解決我的問題的一部分,但我覺得用var YAHOO={Finance:{SymbolSuggest:{}}};是一個骯髒的把戲,是不正確的做法去做。

現在,如果我在字段中鍵入GOO,然後Firebug控制檯會告訴我這樣的事情:

{ 「的ResultSet」:{ 「查詢」: 「咕」, 「結果」: {「symbol」:「GOOG」,「name」:「Google Inc。」,「exch」:「NMS」,「type」:「S」,「exchDisp」:「NASDAQ」,「typeDisp」 },{「symbol」:「GT」,「name」:「固特異輪胎&橡膠公司」,「exch」:「NYQ」,「type」:「S」,「exchDisp」:「NYSE」,「typeDisp 「:」股權「} ...

這是偉大的,但我不知道如何發送回這些數據自動完成從這個回調函數,任何想法?

+0

以下是快速嘗試雅虎財務查詢api的好方法:http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=GOO&callback=YAHOO.Finance.SymbolSuggest.ssCallback – Liyali 2012-02-08 10:57:20

+0

請注意,autoc.finance.yahoo.com提供的這種自動完成功能不是真正的API--它是其網站的內部雅虎功能。你當然可以使用它開發和構建應用程序,但我不會試圖用它構建任何真實的東西,或者你可能會違揹他們的服務條款。 – BrianC 2012-02-08 23:13:50

+0

感謝您的評論,我實際上正在開發一個虛擬投資組合經理。 – Liyali 2012-02-09 06:49:26

回答

3

我終於找到了一個解決方案,但我仍然在使用YAHOO命名空間。

我首先刪除了最後一行(addOnLoad),並在Ajax請求後立即移動它的內容,這樣我仍然進入自動完成功能,並且可以將結果返回到自動完成。

下面是最終代碼:

$this->setJQueryParam('source', new Zend_Json_Expr('function(request, response) { 
     $.ajax({ 
      type: "GET", 
      dataType: "jsonp", 
      jsonp: "callback", 
      jsonpCallback: "YAHOO.Finance.SymbolSuggest.ssCallback", 
      data: { 
       query: request.term 
      }, 
      cache: true, 
      url: "http://autoc.finance.yahoo.com/autoc"; 
      } 
     }); 
     YAHOO.Finance.SymbolSuggest.ssCallback = function (data) { 
      console.log(data.ResultSet.Result); 
      response($.map(data.ResultSet.Result, function(item) { 
       return { 
        label: item.symbol, 
        value: item.name 
       } 
      })) 
     } 
    }')); 
$this->getView()->jQuery()->addJavascript('var YAHOO={Finance:{SymbolSuggest:{}}};'); 

希望它可以幫助!

4

Liyali,感謝您計算併發布代碼。我只是想提供在jQuery自動完成的上下文中的js:

$("#txtTicker").autocomplete({ 
source: function (request, response) { 
    $.ajax({ 
     type: "GET", 
     dataType: "jsonp", 
     jsonp: "callback", 
     jsonpCallback: "YAHOO.Finance.SymbolSuggest.ssCallback", 
     data: { 
      query: request.term 
     }, 
     cache: true, 
     url: "http://autoc.finance.yahoo.com/autoc" 
    }); 

    YAHOO.Finance.SymbolSuggest.ssCallback = function (data) { 
     response($.map(data.ResultSet.Result, function (item) { 
      return { 
       label: item.name, 
       value: item.symbol 
      } 
     })); 
    } 
}, 
minLength: 1, 
select: function (event, ui) { 
    $("#txtTicker").val(ui.item.name); 
}, 
open: function() { 
    $(this).removeClass("ui-corner-all").addClass("ui-corner-top"); 
}, 
close: function() { 
    $(this).removeClass("ui-corner-top").addClass("ui-corner-all"); 
} 

});