2013-05-28 3 views
0

У меня возникла проблема console.logging значения из объекта json, отправленные обратно из моего jquery ajax-вызова в скрипт.Проблема с доступом к значениям объекта json

Сценарий:

for(i=0; i<IDs.length; i++) 
    { 
     var vendor = IDs[i]; 
     $j.ajax({ 
       type: "POST", 
       url: "/ajax_calls/updatePrices.php", 
       data: { 'vendorID': vendor, 'product_id': product_id} 
       }).done(function(data) { 
        console.log('The data is ' + data); 

         var basePrice = simpleArray[vendor][colorSelected]; 

         //if(data.tier2_range_start[i]) 
          console.log('Range start is data.tier2_range_start: ' + data.tier2_range_start); 

         if (qty < data.tier2_range_start){ 
          simpleArray[vendor][colorSelected]= basePrice * qty; 
         } 
         else if (qty > data.tier2_range_start){ 
          simpleArray[vendor][colorSelected]= (basePrice * qty) * data.tier2_discount; 
         } 
         else if (qty > data.tier3_range_start){ 
          simpleArray[vendor][colorSelected]= (basePrice * qty) * data.tier3_discount; 
         } 
         else if (qty > data.tier4_range_start){ 
          simpleArray[vendor][colorSelected]= (basePrice * qty) * data.tier4_discount; 
         } 
         else if (qty > data.tier5_range_start){ 
          simpleArray[vendor][colorSelected]= (basePrice * qty) * data.tier5_discount; 
         } 
         else{ 
          console.log('Something went wrong'); 
         } 


        $j('.details'+vendor+ ' .priceBlock').empty(); 
        $j('.details'+vendor+ ' .priceBlock').append('<span>'+simpleArray[vendor][colorSelected]+'</span>'); 
       }); 
     }//end for 

Сценарий называется:

<?php 
require_once('/var/www/Staging/connect.php'); 

//post variable 
$ID= $_POST['vendorID']; 
$product_id= $_POST['product_id']; 
$echoArray= array(); 

    //if (!isset($echoArray[$x])) 
      //$echoArray[$x] = array(); 
$sql = 'SELECT * FROM tier_pricing WHERE vendor_id=' . $ID. ' AND product_id=' . $product_id; 
    foreach ($con->query($sql) as $row) { 
     $echoArray['vendor_id']= $row['vendor_id']; 
      $echoArray['tier2_range_start']= $row['tier2_range_start']; 
     $echoArray['tier2_range_stop']= $row['tier2_range_stop']; 
     $echoArray['tier3_range_start']= $row['tier3_range_start']; 
     $echoArray['tier3_range_stop']= $row['tier3_range_stop']; 
     $echoArray['tier4_range_start']= $row['tier4_range_start']; 
     $echoArray['tier4_range_stop']= $row['tier4_range_stop']; 
     $echoArray['tier5_range_start']= $row['tier5_range_start']; 
     $echoArray['tier2_discount']= $row['tier2_discount']; 
     $echoArray['tier3_discount']= $row['tier3_discount']; 
     $echoArray['tier4_discount']= $row['tier4_discount']; 
     $echoArray['tier5_discount']= $row['tier5_discount']; 
    } 

echo json_encode($echoArray); 
?> 

данных регистрации в качестве (например, на петле без пустой объект данных):

[15:06:13.397] The data is {"vendor_id":"3","tier2_range_start":"5","tier2_range_stop":"20","tier3_range_start":"20","tier3_range_stop":"100","tier4_range_start":"100","tier4_range_stop":"500","tier5_range_start":"500","tier2_discount":"2","tier3_discount":"3.1","tier4_discount":"4.3","tier5_discount":"5"} 

Почему is data.tier2_range_start undefined?

+0

В запросе, что такое 'IDs'? –

+0

Ваши данные уже массивы, поэтому вам не нужно JSON.parse. Хотя, я не совсем понимаю, что ты возвращаешь. Это массив со смешанными значениями, первые два значения - это пустые массивы, а третий - объект, представляющий поставщика. –

+0

Я только что написал сценарий, который я называю выше. Мне нужны значения для каждого идентификатора поставщика, который я вызываю из базы данных (более одного запроса SQL), поэтому я попытался отследить матричный массив и получить к нему доступ как объект json. Я не уверен, что изменить или как получить доступ на данный момент. Старался избегать создания отдельного ajax-вызова для каждого идентификатора продавца. – CaitlinHavener

ответ

0

Возможно, ваша проблема в data[vendor].tier2_range_start.

Если все ответы, полученные с сервера, имеют ту же форму, что и ваш пример ([Array, Array, Object]), ваш код будет работать только в том случае, если vendor=2. В противном случае вы попытаетесь получить доступ к элементу в массиве, который не существует или не имеет доступа к несуществующему элементу.

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

+0

Я изменил весь свой код, так что я возвращаю только один набор данных за раз. См. Выше. Почему я не могу получить доступ к значению с помощью data.tier2_range_start при возврате данных? – CaitlinHavener

0

Мне пришлось установить данные var = JSON.parse (data); в моем jquery. Кто-нибудь знает, почему?

+0

Если вы не укажете тип, который вы ожидаете с помощью 'dataType', jQuery попытается угадать его. Может быть, он просто не узнал, что это JSON? – Salem

0

вам нужно сообщить jQuery, что возвращаемые данные json, как должен jQuery знать, если вы не введете соответствующий ответ mime в свой ответ?

где-то в начале вашего PHP: header('Content-type: text/json');

в вашем AJAX:

... 
data: { 'vendorID': vendor, 'product_id': product_id}, 
dataType: "json", 
... 

затем JQuery делает работу для Вас. И ваш след должен выглядеть так:

[15:06:13.397] The data is Object object 
+0

Функция json_encode в Php не делает трюк? лол. – CaitlinHavener

+0

@CaitliNHavener: как вы передадите строку json, извлеченную с сервера, обратно на сервер, чтобы json_encode это? Его на стороне клиента, где строка json должна быть преобразована в объект JS. Это выполняется jQuery Ajax, как правило, когда jQuery знает, что данные json. –

+0

[PHP Object] => json_encode() ==== ** отправить ** ====> Браузер/JS (jQuery, eval, JSON.parse(), ...) ==> Объект JavaScript ==> "object.property" –

Смежные вопросы