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

I have a graph i created from a SharePoint list and it works in Chrome but does not work in IE 11. When i went to debug in IE 11 and I get the error SCRIPT438: Object doesn't support property or method 'values'. I am fairly new to JavaScript.

Can anybody tell me what may be a fix or what I am missing

I am using chart.js and ajax.

<script type="text/javascript" src="/sites/carm/Shared%20Documents/Chart.min.js"></script>
<script type="text/javascript" src="/sites/carm/Shared%20Documents/jquery-1.12.4.min.js"></script>

<script type="text/javascript">

$.ajax({
        url: "/sites/carm/_api/web/lists/getbytitle('ATO%20Conditions')/items?$select=ID,Title,m4gs&$top=5000",
        type: "GET",
        headers: {
            "accept": "application/json;odata=verbose",
        },
        success: function(data) {

            if (data.d.results.length > 0) {
                var inactiveSet = {};
                var activeSet = {};
                var otherSet = {};
                var totalActive = 0;
                var totalInActive = 0;
                var totalOther = 0;
                var initZero = 0;

                $.each(data.d.results, function(index, item) {
                    if (item.m4gs === "Completed") {
                        totalInActive++
                        if (item.Title in inactiveSet) {

                            inactiveSet[item.Title]++;
                        } else {
                            inactiveSet[item.Title] = 1;
                            activeSet[item.Title] = initZero;
                            otherSet[item.Title] = initZero;
                        }
                    } else if (item.m4gs === "Active") {

                        totalActive++
                        if (item.Title in activeSet) {

                            activeSet[item.Title]++;

                        } else {
                            inactiveSet[item.Title] = initZero;
                            activeSet[item.Title] = 1;
                            otherSet[item.Title] = initZero;
                        }
                    } else {
                        totalOther++
                        if (item.Title in otherSet) {
                            otherSet[item.Title]++;
                        } else {
                            inactiveSet[item.Title] = initZero;
                            activeSet[item.Title] = initZero;
                            otherSet[item.Title] = 1;
                        }
                    }
                });
            }
            var inactiveOrdered = {};
            var activeOrdered = {};
            var otherOrdered = {};

            Object.keys(activeSet).sort().forEach(function(key) {
                activeOrdered[key] = activeSet[key];
            });

            Object.keys(inactiveSet).sort().forEach(function(key) {
                inactiveOrdered[key] = inactiveSet[key];
            });

            Object.keys(otherSet).sort().forEach(function(key) {
                otherOrdered[key] = otherSet[key];
            });

            var ctx = document.getElementById("myChart").getContext("2d");

            var data = {
                labels: Object.keys(activeOrdered),
                datasets: [{
                        label: "Active",
                        fillColor: "steelblue",
                        data: Object.values(activeOrdered)
                    },
                    {
                        label: "Completed",
                        fillColor: "orange",
                        data: Object.values(inactiveOrdered)
                    }
                ]
            };
            ....    
</script>

The error is coming from the line starting with

...
var data = {
            labels: Object.keys(activeOrdered),
...

Я пытаюсь написать некоторые коды, чтобы получить json файл и прочитать. Но эти коды работают в chrome, не работают в IE11, и мне нужно использовать IE. Каково реальное решение для решения этой проблемы на самом деле. Я изменил некоторые имена значений, но такая же проблема все еще кажется.

Сообщение об ошибке

<html xmlns="http://www.w3.org/1999/xhtml">
    <head> 
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
    </head>
    <body>   
    	<table id="userdata" border="0.02">
    		
    			<th>Revision  Date</th>
    			<th>Document  Name</th>
    			<th>Department </th>
    			<th>Description</th>
    			<th>Link</th>
    	</table>
    <script>
              myObjects = [];
            $.getJSON('https://api.myjson.com/bins/1djve3', function(deneme) {
            myObjects = Object.values(deneme);
            console.log("Objects in array " + myObjects.length);
            
             $.each(myObjects, function(i, person) {
                  $('#userdata  th:nth-child(2)').html(person.revisiondate)
                  console.log("Person-" + person.revisiondate);
                  console.log("Person-" + person.documentname);
                  console.log("Person-" + person.department);
                  console.log("Person-" + person.description);
                  console.log("Person-" + person.link.split('href=')[1]+"' "+person.link.split('href=')[1]);    
                  
                  var $row = 
    							"<tr><td>" + person.revisiondate + 
                                "</td><td>" + person.documentname + 
                                "</td><td>" + person.department +
                                "</td><td>" + person.description + 
                                "</td><td><a target='_blank' href='"+ person.link.split('href=')[1]+"' >"+person.link.split('href=')[1]+"</a></td></tr>"  
    
    $('table> tbody:last').append($row);
                }); 
              }); 
    		  
           
    </script>
    </body>
    </html> 

06 апр. 2017, в 15:11

Поделиться

Источник

1 ответ

Вместо этой строки

myObjects = Object.values(deneme);

записи,

myObjects = Object.keys(deneme).map(itm => deneme[itm]);

Потому что Object.values ​​ является экспериментальной функцией и не поддерживается в IE.

Если ваш браузер не поддерживает функции стрелок, тогда пишите,

myObjects = Object.keys(deneme).map(function(itm) { return deneme[itm]; });

Rajaprabhu Aravindasamy
06 апр. 2017, в 14:06

Поделиться

Ещё вопросы

  • 1C # — XML дочерние узлы в текстовое поле
  • 0Как получить содержимое элемента, включая слушателей
  • 1селен питон не может определить идентификатор или имя
  • 1Просмотр полноэкранного изображения после нажатия кнопки onClick
  • 0Проблема реализации базовых шаблонов
  • 0Показать / скрыть без использования CSS
  • 0Как реализовать манипуляции с изображениями в Jquery или ASP.Net?
  • 1Транспонировать CSV с помощью панд
  • 1Использование значения символа для создания новых строк в Pandas
  • 1Xpath Java получает элемент, проверяя значение
  • 1MVC Paging не работает в AJAX-форме
  • 0Удержание курсора мыши над ручкой при перемещении мыши
  • 0Как я могу поделиться переменными между представлениями, с тем же контроллером в AngularJS?
  • 1Декомпрессия ZLib
  • 1Соедините 2 отношения внешнего ключа в одном объекте в запросе
  • 1Как создать объект JSON с ключом и значением, где значение является массивом
  • 0Я хочу передать два объекта в одну переменную в Angular JS
  • 0Интерфейс Laravel
  • 1WPF TabControl DataBinding для другого класса
  • 0Laravel пытается проверить, есть ли у пользователя связь с постом.
  • 0События Jquery не работают должным образом с AngularJS
  • 0Класс элемента не отражается после append ()
  • 0Оберните кучу вариантов внутри стола в Symfony / Twig
  • 1Вызов хранимой процедуры от Lightswitch
  • 0AngularJS кликает только на небольших разрешениях
  • 0Хотите показать все значения данных в своей группе с заголовком в CGridview в yii
  • 1Перевод с использованием Google Translate API
  • 0Скрыть один элемент и показать другой при наведении
  • 0изменить первое и последнее значение строки PHP
  • 1Добавление минут к метке времени в python
  • 0после введения HTML, как связать область видимости контроллера
  • 1HTML5: воспроизведение потокового HTTP в домене HTTPS
  • 0В пользовательском интерфейсе jQuery не работают вкладки пользовательского интерфейса jQuery (карта Google V3)
  • 0Как преобразовать предложение WHERE IN с несколькими значениями в RegExp или Like
  • 0проверить числовое значение, используя .submit jquery
  • 0добавлять теги div после определенного количества раз в javascript / jquery
  • 0IE слишком медленный при добавлении большого количества HTML в DOM через Javascript
  • 0Reg: подача данных о выпуске продукта Amazon
  • 0Стрлен переменной GET
  • 0как получить доступ к различным элементам формы на HTML-странице с помощью Angular JS без использования Views of Angular JS
  • 0Запрос для получения студентов и оценки SQL
  • 1Как остановить службу переднего плана перед вызовом метода startForeground ()?
  • 0По умолчанию возвращать не прямоугольные объекты для всех маршрутов.
  • 0Как прочитать значения динамической HTML-таблицы из текстового файла?
  • 1getAdapter (). notifyDataSetChanged () не изменяет базу данных для повторного просмотра
  • 1Редактирование текстового средства просмотра текста для всех редактируемых текстов в просмотре списка
  • 1Не удалось загрузить ресурс при загрузке изображения
  • 1Отображать изображения в сетке
  • 1Где внешняя библиотека, загруженная gradle, хранится в проекте Android?
  • 1Вернуть строку с разделителями-запятыми, используя только значения

Сообщество Overcoder

IE 11 и Angular не всегда сочетаются друг с другом. Я должен сказать, что команда разработчиков Angular и сообщество оказывают поддержку. Но есть вещи, которые разработчики Angular не могут исправить.

Я составил небольшой список проблем, с которыми я столкнулся при разработке приложения Angular 5 для клиента IE 11.

Во-первых, если вас когда-либо попросят поддержать IE, отговорите своего клиента / менеджера / клиента от этого. Покажите им этот пост в блоге, покажите им ссылки, покажите им эту ошибку IE, которая все еще открыта спустя 4 года. Настоятельно не советую. Обратите внимание, что следующие современные технологии не поддерживаются в IE11:

  • Веб-сборка (WASM)
  • CSS Grid (ошибки)
  • Flexbox (ошибки)
  • Плохая работа
  • WEBM
  • Сервисные работники (PWA)
  • Веб-анимация

Кроме того, в 2013 году был выпущен IE11.

Если вы не преуспели в выполнении первой задачи, мои соболезнования, вот несколько общих проблем, которые вам следует иметь в виду при поддержке IE в разработке Angular.

Инструменты разработчика F12

При использовании инструментов разработчика IE11 Angular выдает ошибку Невозможно выполнить код из освобожденного скрипта. »

Самый эффективный способ исправить это — включить перекрестную проверку контекста в Zone.js. Поместите эти строки в свой файл polyfills.ts:

/*
* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
* with the following flag, it will bypass `zone.js` patch for IE/Edge
*/
//(window as any).__Zone_enable_cross_context_check = true;
if (document['documentMode'] || /Edge/.test(navigator.userAgent)) {
    (window as any).__Zone_enable_cross_context_check = true;
}

ngForm valueChanges запускается при загрузке страницы

Если вы используете ввод Angular Reactive Form с заполнителем, вы можете столкнуться с тем, что поля изначально загрязнены при загрузке страницы. Это связано с ошибкой в ​​IE и не будет исправлено в ближайшее время.

A̵ ̵w̵o̵r̵k̵a̵r̵o̵u̵n̵d̵ ̵w̵o̵u̵l̵d̵ ̵b̵e̵ ̵t̵o̵ ̵’̵e̵n̵a̵b̵l̵e̵’̵ ̵y̵o̵u̵r̵ ̵f̵o̵r̵m̵ ̵a̵f̵t̵e̵r̵ ̵t̵h̵e̵ ̵c̵o̵m̵p̵o̵n̵e̵n̵t̵ ̵h̵a̵s̵ ̵f̵i̵n̵i̵s̵h̵e̵d̵ ̵v̵i̵a̵ ̵t̵h̵e̵ ̵O̵n̵I̵n̵i̵t̵ ̵a̵n̵d̵ ̵A̵f̵t̵e̵r̵V̵i̵e̵w̵C̵h̵e̵c̵k̵e̵d̵ ̵l̵i̵f̵e̵c̵y̵c̵l̵e̵ ̵h̵o̵o̵k̵s̵,̵ ̵b̵a̵s̵i̵c̵a̵l̵l̵y̵ ̵y̵o̵u̵ ̵s̵e̵t̵ ̵a̵ ̵f̵l̵a̵g̵ ̵t̵o̵ ̵f̵a̵l̵s̵e̵ ̵a̵n̵d̵ ̵f̵l̵i̵p̵ ̵t̵h̵e̵ ̵b̵i̵t̵ ̵a̵f̵t̵e̵r̵ ̵t̵h̵e̵ ̵v̵i̵e̵w̵ ̵w̵a̵s̵ ̵c̵h̵e̵c̵k̵e̵d̵.̵ ̵

T̵h̵i̵s̵ ̵d̵o̵e̵s̵ ̵n̵o̵t̵ ̵c̵o̵m̵p̵l̵e̵t̵e̵l̵y̵ ̵e̵l̵i̵m̵i̵n̵a̵t̵e̵ ̵t̵h̵e̵ ̵i̵s̵s̵u̵e̵,̵ ̵b̵u̵t̵ ̵i̵t̵ ̵s̵h̵o̵u̵l̵d̵ ̵p̵r̵o̵v̵i̵d̵e̵ ̵y̵o̵u̵ ̵w̵i̵t̵h̵ ̵a̵ ̵d̵i̵r̵e̵c̵t̵i̵o̵n̵ ̵o̵n̵ ̵h̵o̵w̵ ̵t̵o̵ ̵s̵o̵l̵v̵e̵ ̵i̵t̵.̵

Решение этой проблемы состоит в том, чтобы отложить регистрацию событий «change» и «input» в поле ‹input› до завершения инициализации представления (AfterViewInit) вместе с setTimeout.

Контент Flex плохо выровнен

IE11 сходит с ума, если для гибкости установлено значение auto, установите его на 100%, чтобы получить правильное поведение гибкости.

flex-basis: 100%;

Объект не поддерживает свойство или метод «включает» && Объект не поддерживает свойство или метод «значения»

Для поддержки IE11 (или других старых браузеров) некоторые функции JavaScript должны быть полифилированы.

Чтобы исправить отсутствующий метод «includes», вам нужно поместить эту строку в файл polyfill.ts:

import 'core-js/es7/array';

Чтобы исправить отсутствующий метод «values», вам нужно поместить эту строку в свой файл polyfill.ts:

import 'core-js/es7/object';

Это пример нашего файла polyfill.ts, все, что нам нужно, это включить поддержку IE11:

/**
* This file includes polyfills needed by Angular and is loaded before the app.
* You can add your own extra polyfills to this file.
*
* This file is divided into 2 sections:
*   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
*   2. Application imports. Files imported after ZoneJS that should be loaded before your main
*      file.
*
* The current setup is for so-called "evergreen" browsers; the last versions of browsers that
* automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
* Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
*
* Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
*/
/***************************************************************************************************
* BROWSER POLYFILLS
*/
/** IE9, IE10 and IE11 requires all of the following polyfills. **/
import 'core-js/es6/symbol';
import 'core-js/es6/object';
import 'core-js/es6/function';
import 'core-js/es6/parse-int';
import 'core-js/es6/parse-float';
import 'core-js/es6/number';
import 'core-js/es6/math';
import 'core-js/es6/string';
import 'core-js/es6/date';
import 'core-js/es6/array';
import 'core-js/es6/regexp';
import 'core-js/es6/map';
import 'core-js/es6/weak-map';
import 'core-js/es6/set';
/** IE10 and IE11 requires the following for NgClass support on SVG elements */
// import 'classlist.js';  // Run `npm install --save classlist.js`.
/** IE10 and IE11 requires the following for the Reflect API. */
import 'core-js/es6/reflect';
import 'core-js/es7/array';
import 'core-js/es7/object';
/** Evergreen browsers require these. **/
// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
import 'core-js/es7/reflect';
/**
* Required to support Web Animations `@angular/platform-browser/animations`.
* Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation
**/
// import 'web-animations-js';  // Run `npm install --save web-animations-js`.
/***************************************************************************************************
* Zone JS is required by default for Angular itself.
*/
import 'zone.js/dist/zone';  // Included with Angular CLI.

Объект не поддерживает это действие

Ошибка Объект не поддерживает это действие в IE11 сложно определить. В нашей кодовой базе виноват конструктор для File. Чтобы решить эту проблему, нам пришлось преобразовать Blob в File без вызова конструктора.

private blobToFile = (theBlob: Blob, name: string, fileName: string): File => {
     const blob: any = theBlob;
     blob.lastModifiedDate = new Date();
     blob.name = name;
     blob.fileName = fileName;
     return <File>theBlob;
}

На данный момент это все, мы все еще в разработке для поддержки IE11, поэтому ожидайте, что этот список со временем будет расти.

А пока я хочу уточнить, что не хочу критиковать Microsoft. Мне нравится работать с технологиями Microsoft, но я искренне верю, что IE должен быть мертв и похоронен. Факел необходимо передать в Edge, который я считаю достойным браузером в этом обширном и постоянно меняющемся веб-ландшафте.

ИЗМЕНИТЬ Февраль 2019 г.

Теперь кажется, что Microsoft не рекомендует разрабатывать для Internet Explorer, поскольку это не путь вперед: https://techcommunity.microsoft.com/t5/Windows-IT-Pro-Blog/The-perils-of-using- Internet-Explorer-as-your-default-browser / ba-p / 331732

У меня есть функция jquery, которая использует JSON для печати текста из PHP. Он отлично работает в Chrome, но у меня есть эта странная ошибка в IE края. Объект не поддерживает свойство или метод.

    $(function() {
    $( "#catlist ul" ).sortable({
        placeholder: "ui-state-highlight",
        stop: function( event, ui ) {
            var list = ui.item.parent();
            var sorted = list.sortable( "toArray", { key: "catid[]" } );

            $.post( "catalog_ajax.php", { cmd: "reorder", sorted: sorted}, function( data ) {
                if (data.code=='OK') {

                } else {
                    alert('NOK');
                }
            },'json');

        }

    });
    $( "#catlist ul" ).disableSelection();

    $('.prodcat-remove').on('click', function(e) {
        e.preventDefault();
        var ajaxurl = $(this).data('href');
        if (confirm('Czy na pewno chcesz usunąć?')) {
            $.getJSON(ajaxurl, function (response) {
                if (response.hasOwnProperty('success')) {
                    if (response.success) {
                        $('#catid_'+response.success).remove();
                    } else {
                        alert('Nie udało się usunąć kategorii, spróbuj ponownie później.');
                    }
                } else {
                        if (confirm("Uwaga!n" + Object.values(response).join("n"))) {
                            $.getJSON(ajaxurl + '&force=1', function (response) {
                                if (response.hasOwnProperty('success')) {
                                    if (response.success) {
                                        $('#catid_'+response.success).remove();
                                    } else {
                                        alert('Nie udało się usunąć kategorii, spróbuj ponownie później.');
                                    }
                                } else {
                                    alert("Nie można usunąć katalogun" + Object.values(response).join("n"));
                                }
                            });
                        }
                }
            });
        }
    });

Его нарушение на линии

if(confirm("Uwaga!n"+Object.values(response).join("n")))

Я понятия не имею, в чем проблема …

2 ответа

Лучший ответ

.values не поддерживается во многих браузерах — вы можете использовать .map для получения массива всех значений:

 var vals = Object.keys(countries).map(function(key) {
        return countries[key];
    });


2

user6489464user6489464
26 Июн 2017 в 06:41

Чтение документации Object.values() вы увидите, что Internet Explorer не поддерживается, но есть поддержка Chrome / Firefox / Edge

Вместо этого вы можете использовать

Object.keys(response).map(k=>response[k])

Object.keys() is поддерживается начиная с IE9


2

Weedoze
26 Июн 2017 в 06:41

Я написал код javascript для моего проекта. Этот код работает отлично для всех браузеров, кроме Internet Explorer.

в Internet Explorer говорится:

Объект не поддерживает значения свойств или методов ‘

Вот мой код

Object.values(products.reduce(function(c, v) {
c[v.budget] = c[v.budget] || {id: v.budget,remainingBudget: v.remainingBudget,total: 0};
c[v.budget].total += parseFloat(v.unitPrice)*parseFloat(v.quantity);
return c;
}, {})).filter(function (o) {return o.remainingBudget < o.total})

Я сделал некоторые исследования и разработки, и в нем говорится, что вместо Object.values используйте Object.keys. Но я не могу переписать мой код.

Может кто-нибудь помочь мне переписать мой код для интернет-исследователя?

Понравилась статья? Поделить с друзьями:
  • Ошибка объект не поддерживает свойство или метод includes
  • Ошибка одни вопросы
  • Ошибка объект или свойство не найдено 0x80092004
  • Ошибка одна или несколько служб звука не запущены
  • Ошибка одинокого бизона отзывы