jQuery自动完成和雅虎财经

时间:2012-02-08 10:54:57

标签: javascript jquery zend-framework yql yahoo-api

我正在尝试让jQuery Autocomplete,Yahoo Finance和Zend Framework协同工作。

我想要的是创建一个表单域,我可以通过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”:{“查询”:“goo”,“结果”:[{“symbol”:“GOOG”,“name”:“Google Inc。”,“exch”:“NMS”,“输入“:”S“,”exchDisp“:”NASDAQ“,”typeDisp“:”Equity“},{”symbol“:”GT“,”name“:”Goodyear Tire& Rubber Co。“,”exch“ : “NYQ”, “类型”: “S”, “exchDisp”: “纽约”, “typeDisp”: “公平”} ...

这很棒,但我不知道如何从这个回调函数将这些数据发送回自动完成,不知道吗?

2 个答案:

答案 0 :(得分: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");
}

});

答案 1 :(得分: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:{}}};');

希望它可以提供帮助!