jQuery Autocomplete и Yahoo Finance - PullRequest
       37

jQuery Autocomplete и Yahoo Finance

2 голосов
/ 08 февраля 2012

Я пытаюсь заставить 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)); }');

Я нашел этот пост , который решил часть моей проблемы, но я думаю, что использование var YAHOO={Finance:{SymbolSuggest:{}}}; - это грязный трюк и неправильный способ.

Теперь, если я наберу GOO на своем поле, консоль firebug покажет мне что-то вроде этого:

{"ResultSet": {"Query": "goo", "Result": [{"symbol": "GOOG", "name": "Google Inc.", "Exch": "NMS", " type ":" S "," exchDisp ":" NASDAQ "," typeDisp ":" Equity "}, {" symbol ":" GT "," name ":" Goodyear Tire & Rubber Co. "," exch ": "NYQ", "типа": "S", "exchDisp": "NYSE", "typeDisp": "Справедливость"} ...

это здорово, но я не знаю, как отправить эти данные в автозаполнение из этой функции обратного вызова, вы понимаете?

Ответы [ 2 ]

4 голосов
/ 22 марта 2012

Лияли, спасибо, что выяснили это и опубликовали код.Я просто хотел предоставить js в контексте автозаполнения jquery:

$("#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");
}

});

3 голосов
/ 09 февраля 2012

Я наконец нашел решение, но я все еще использую пространство имен 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:{}}};');

Надеюсь, это поможет!

...