Ошибка jQuery: объект не поддерживает это свойство или метод

Я искал и искал причину, по которой этот код ломается только в IE. Кажется, работает в Firefox и Chrome. Отладчик IE8 продолжает жаловаться и выделяет этот блок кода.

var query = {
 display: opts.display.join(', '),
 quotes: opts.stocks.map(function (stock) {
 return '"' + stock + '"';
 }).join(', ')
 }

Пробовал даже использовать jQuery.noConflict, который только заставлял его работать не в ЛЮБОЙ браузер. Нет конкретного вызова прототипа вообще в этом проекте, его просто базовый список символов акций и эта переменная выше в основном просто связывают "и запятые между ними в соответствии с стандартом YQL. Не знаю, почему это вызывает ошибку.

-update Я выяснил, почему я получаю эту ошибку. IE8 и ниже не поддерживают функцию javascript map(). Я прочитал пример альтернатив, и кто-то предложил использовать функцию карты jQuery, ну, похоже, это не работает, или я просто не пишу это правильно. Все попытки выполняются в запросе var, который я пытаюсь в основном рекурсивно пройти через массив и добавить нумерацию, требуемую для запроса YQL.

function getStock(opts, complete) {
 var defs = {
 desc: false,
 baseURL: 'http://query.yahooapis.com/v1/public/yql?q=',
 query: 'select {display} from yahoo.finance.quotes where symbol in ({quotes}) | sort(field="{sortBy}", descending="{desc}")',
 suffixURL: '&env=store://datatables.org/alltableswithkeys&format=json&callback=?'
 };
 opts = $.extend({
 display: ['*'],
 stocks: []
 }, opts || {});
 if (!opts.stocks.length) {
 complete('No stock defined');
 return;
 }

 //var query = $.map({
 //display: opts.display.join(', '),
 //quotes: opts.display.stocks(function(stocks) {
 //return '"' + stocks + '"';
 //}).join(', ')
 // });
 //var query = {
 //display: opts.display.join(', '),
 //quotes : $.map(opts.display.stocks(quotes, function(stock) {
 //return '"' + stock + '"';
 //})).join(', ')
 //};
 alert(query);
 //var query = {
 //display: opts.display.join(', '),
 //quotes: opts.stocks.map(function (stock) {
 //return '"' + stock + '"';
 //}).join(', ')
 //};
 //function (stock) returns "ticker symbol"
 defs.query = defs.query.replace('{display}', query.display).replace('{quotes}', query.quotes).replace('{sortBy}', defs.sortBy).replace('{desc}', defs.desc);
 defs.url = defs.baseURL + defs.query + defs.suffixURL;
 $.getJSON(defs.url, function (data) {
 var err = null;
 if (!data || !data.query) {
 err = true;
 }
 complete(err, !err && data.query.results);
 var items = data.query.results.quote;
 alert(items[0].LastTradePriceOnly);
 });
 }

Я включил все неудачные итерации этой переменной. Ни один из них не работает в любом браузере. Возможно, кто-то может помочь перевести это в jQuery equivelant?

1 ответ

Хорошо, я понял это, используя ссылку jQuery.com на функцию карты, это было бы правильное преобразование из предыдущего утверждения

оригинал

var query = {
 display: opts.display.join(', '),
 quotes: opts.stocks.map(function (stock) {
 return '"' + stock + '"';
 }).join(', ')
 };

Преобразован jQuery

var query = {
 display: opts.display.join(', '),
 quotes: $.map(opts.stocks, function (stock) {
 return '"' + stock + '"';
 }).join(', ')
 };

проблема отображения конца для устаревших браузеров IE

licensed under cc by-sa 3.0 with attribution.