2016-11-04 3 views
1

Я сделал запрос ajax в своем коде, и он работает хорошо. После этого я хочу извлечь только необходимую информацию и переписать ее на другой скрипт. До сих пор вот мой код:Невозможно прочитать свойство undefined после разбора JSON

$.ajax({ 
     type: "POST", 
       url: url, 
       data: {xhr_id: xhr_id}, 
       success: function (jsondata) { 

        var product_data = []; 

         for (var i = 0; i <= 3; i++) { 

         //alert(jsondata.products[i].product_description.toSource()); 

         product_data[i] = {}; 
         product_data[i]["product" + i] = jsondata.products[i].product_description; 

         //alert(product_data[i]["product" + i].toSource()); 
        } 
       }, 
       dataType: "json" 
     }); 

Проблема в том, что оба предупреждения работают нормально, отображая информацию, которую я хочу. Тем не менее, я получаю сообщение об ошибке «Uncaught TypeError: невозможно прочитать свойство« product_description »неопределенного», которое нарушает сценарий и мешает мне делать что-либо еще. Что я делаю неправильно, какие-то идеи?

+1

'jsondata.products [я] .product_description'. - у вас есть жёстко прописанная длина цикла ваших данные obvi но меньше этой длины. – tymeJV

+0

@Phylogenesis - OP уже делает это. Массив объявляется и добавляется внутри 'success'. – tymeJV

+0

@tymeJV True. Я удалил неверный комментарий. – Phylogenesis

ответ

1

'product_description' of undefined ", что означает, что вы пытаетесь получить доступ к свойству по неопределенной переменной. Это означает, что« jsondata.products [i] »привел к неопределенному значению, которое произошло из-за индекса за пределами диапазона. многие записи возвращаются в jsondata 3 или 4, проверяют и корректируют условие в цикле

0

Параметр функции success() из $ .ajax - это строка. Вы должны выполнить ее через функцию синтаксического анализа, чтобы сделать json См. код ниже изменено, но не тестировалось

$.ajax({ 
     type: "POST", 
       url: url, 
       data: {xhr_id: xhr_id}, 
       success: function (jsondata) { 
        var oData; 
        try { oData=jQuery.parseJSON(jsondata) } 
        catch(err) { 
         alert("Problem parsing json string : " + jsondata) 
         return false 
        } 

        var product_data = []; 

         for (var i = 0; i <= 3; i++) { 

         //alert(oData.products[i].product_description.toSource()); 

         product_data[i] = {}; 
         product_data[i]["product" + i] = oData.products[i].product_description; 

         //alert(product_data[i]["product" + i].toSource()); 
        } 
       }, 
       dataType: "json" 
     }); 
Смежные вопросы