Ошибка Uncaught TypeError: Cannot read property '1' of null?
Есть сайт самописный, пк и мобильная версия отдельно. В Пк версии цена отображается корректно. А в мобильной версии как я понял идет парс цены. Так вот при открытии товара - появляется товар но цена пустая и в консоле следующая ошибка:
Код:
Uncaught TypeError: Cannot read property '1' of null function getSapogCost(SapogType, arrPrices) { var price = 0; switch(+SapogType){ case 1: case 2: price = arrPrices[1]; // ОШИБКА В этой строке break; case 3: case 4: case 5: price = arrPrices[2]; // ОШИБКА в зависимости от товара может и тут быть break; case 6: price = arrPrices[3]; // ОШИБКА в зависимости от товара может и тут быть break; case 7: default: price = arrPrices[4]; // ОШИБКА в зависимости от товара может и тут быть }; return price; } Строки кода mob.js function openBlockSapog( data, SapogContent ){ openModal({ content: SapogContent.Sapog.content }, false); if( SapogContent.Sapog.type == 'free' ) { var SapogType= + SapogContent.Sapog.SapogData[4]; $('.ajax-box .Sapog-image').attr( 'src', './img/'+SapogType+'.png'); price=getSapogCost(SapogType, SapogContent.Sapog.prices)// ОШИБКА в этой строке if( SapogType == SapogContent.Sapog.freeSapogType && SapogContent.Sapog.haveFreeSapog == 0 ){ price = 0; } $('.ajax-box .summa').html(price+'$'); }else{ transLiter('.ajax-box .translit'); } } function allSearchMethods( action, data, processingRequest ){ $.post(action, data, function (response) { // Все ок есть такой пользователь if (response.error != undefined) { showError(response); } // Вывести сообщение ошибки else if (response.ok != undefined) { if (response.Sapog != undefined) { if(processingRequest) processingRequest.css('visibility', 'hidden'); openBlockSapog(response.Sapog, {Sapog:{content:response.content, idSapog:response.Sapog.idSapog, type:response.type, prices:response.prices, SapogData:response.SapogData}});// ОШИБКА в этой строке delete response; return; } if (response.Sapog == undefined) { openModal({ title:response.title, content:'<div class="element-child scroll">' + response.content + '</div>' },true); elementChildAddClass(); transLiter('.ajax-box .translit'); //add open full Sapog list for one user $('.openFullSapogList').bind('click', function(){ var divEl = $('#FullSapogList-'+$(this).attr('data-idUser') ); if( divEl.css('display') == 'none' ){ divEl.css('display', 'block'); } else{ divEl.css('display', 'none'); } }); } } |
У вас в функцию getSapogCost вместо массива вторым аргументом передается null.
|
т.е arrPrices - возвращает null, потому что там нет цены?
|
orb,
Цитата:
|
Получается вместо аргумента должен передаваться массив с данными, а именно ценой? Что мне нужно найти, чтобы исправить это
|
Цены. На сервере. В ответ на post запрос, с сервера в response.prices тебе приходит null вместо массива цен.
Если цены не важны - добавь сверху в getSapogCost: if(!arrPrices) return 0; |
надо чтобы цены отображались, есть конфиг файл в нем вот так цены указаны
$config['priceSapog'] = array( 1 => $config['priceDefRUR1'], 2 => $config['priceDefRUR1'], 3 => $config['priceDefRUR2'], 4 => $config['priceDefRUR2'], 5 => $config['priceDefRUR2'], 6 => $config['priceDefRUR3'], 7 => $config['priceDefRUR4'], ); |
Цитата:
|
Так он везде возвращает, но именно в мобильной версии как я понял через парс все это дело идет и идет подмена функций
|
Каких функций и зачем подменять? В отладчике смотрите что возвращается сервером, что далее делается. Для этого нужно разрешить удаленную отладку на моб. устройстве и в отладчике браузера (настольного компьютера) выбрать и подключить устройство, можно будет отлаживать. Как это делается в разных браузерах, найдете в сети, есть описания, а гадать на кофейной гуще приходит ли у вас или нет никто не станет.
|
Цитата:
У вас на клиент передается прямо массив $config? Если это так, то названия его ключей на клиенте и сервере не совпадают. На сервере цены имеют ключ priceSapog, а на клиенте идет обращение к ключу prices. |
В общем сервером возвращался NULL в поле prices, исправил
теперь есть значения, prices: {1: "10", 2: "10", 3: "700", 4: "700", 5: "700", 6: "200", 7: "400"} Но нет сортировки почему-то на конкретную цену, а выходит вся группа без сортировки, в зависимости от товара должна быть одна цена. Ну в консоле эти ошибки остались mob.js?:137 Uncaught ReferenceError: response is not defined at openBlockSapog (mob.js?:137) at Object.success (mob.js?:89) function allSearchMethods( action, data, processingRequest ){ $.post(action, data, function (response) { // Все ок есть такой пользователь if (response.error != undefined) { showError(response); } // Вывести сообщение ошибки else if (response.ok != undefined) { if (response.Sapog != undefined) { if(processingRequest) processingRequest.css('visibility', 'hidden'); openBlockSapog(response.Sapog, {Sapog:{content:response.content, idSapog:response.Sapog.idSapog, type:response.type, prices:response.prices, SapogData:response.SapogData}}); // В ЭТОЙ СТРОКЕ ОШИБКА delete response; return; } if (response.Sapog == undefined) { // Close blue block openModal({ title:response.title, content:'<div class="element-child scroll">' + response.content + '</div>' },true); elementChildAddClass(); transLiter('.ajax-box .translit'); //add open full Sapog list for one user $('.openFullSapogList').bind('click', function(){ var divEl = $('#FullSapogList-'+$(this).attr('data-idUser') ); if( divEl.css('display') == 'none' ){ divEl.css('display', 'block'); } else{ divEl.css('display', 'none'); } }); } } // Скрыть блок процесса if( processingRequest ) processingRequest.css('visibility', 'hidden'); }, 'json'); } function openBlockSapog( data, SapogContent ){ openModal({ content: SapogContent.Sapog.content }, false); if( SapogContent.Sapog.type == 'free' ) { var SapogType= + SapogContent.Sapog.SapogData[4]; $('.ajax-box .Sapog-image').attr( 'src', './img/'+SapogType+'.png'); price=getSapogCost(SapogType, SapogContent.Sapog.prices); //единственная бесплатный товар из free-типа товара if( SapogType == response.freeSapogType && response.haveFreeSapog == 0 ){ // В ЭТОЙ СТРОКЕ ОШИБКА price = 0; } $('.ajax-box .summa').html(price+'$'); }else{ transLiter('.ajax-box .translit'); } } |
Откуда у тебя там response возьмётся вообще? Ты его не передаёшь.
Учи javascript нормально или найми фрилансера. |
Часовой пояс GMT +3, время: 07:56. |