2015-08-21 7 views
0

Вот мой JavaScript:JQuery - Ajax не возвращает ответ JSON

    $.ajax({ 
         url: 'CheckColorPrice.php', 
         type: 'POST', 
         data: { 
          url: '<?php echo $LINK;?>', 
          ColorId: ColorNumber 
         }, 
         dataType: 'json', 
         success: function (data) { 
          $('#LoadingImage').hide(); 
           $("#PRICE").text("£ " + data["price"]);        
         } 
        }); 

Вот CheckColorPrice.php:

<?PHP 
$url = $_POST['url']; 
$ColorId = $_POST['ColorId'];  
if(isset($_POST['url'])) 
{ 
    libxml_use_internal_errors(true); 
    $doc = new DOMDocument(); 
    $doc->loadHTMLFile($url); 

    $xpath = new DOMXpath($doc); 

    $DataVariants = $xpath->query('//span[@class="ImgButWrap"]/@data-variants')->item(0)->nodeValue; 

    $jsonStart = strpos($DataVariants, '['); 
    $jsonEnd = strrpos($DataVariants, ']'); 

    $collections = json_decode(substr($DataVariants, $jsonStart, $jsonEnd - $jsonStart + 1)); 

    foreach ($collections as $item) { 
     $ColVarId = $item->ColVarId; 

     $SizeNames = []; 
     $SellPrice = []; 
     foreach ($item->SizeVariants as $size) { 
      $SizeNames[] = $size->SizeName; 
      $SellPrice[0] = $size->ProdSizePrices->SellPrice; 
     } 
     $names = implode(',', $SizeNames); 
     $price = implode('', $SellPrice); 

    if($ColVarId == $ColorId){ 
       $healthy2 = array('£',' ','Â'); 
       $yummy2 = array('','',''); 
       $price = str_replace($healthy2, $yummy2, $price); 
       $PRICE = $price; 
      echo "price: ", json_encode($PRICE), "\n"; 

    } 
} 

} 

?> 

Результат от CheckColorPrice.php выглядит так же, как это:

price: "37.99" 

Где моя ошибка, почему она не получает ответ должным образом. Я этого не понимаю ... Ты можешь помочь мне?

Заранее благодарен!

+0

У вас есть следующие строки: 'эхо "цена:" json_encode ($ PRICE), "\ п";' ~ это означает, что вы возвращаете строку, а не объект JSON , Если вы собираетесь работать с json-данными, php должен делать что-то вроде: - echo json_encode (array ('price' => $ price)); – RamRaider

ответ

1

Добавьте следующий заголовок вашего скрипта:

заголовок ('Content-Type: приложения/JSON'); header («Content-Disposition: inline; filename = ajax.json»);

изменить также строку

echo "price: ", json_encode($PRICE), "\n"; 

в

echo json_encode(array('price'=>$PRICE)); 

Надежда, что помогает

3

Вы не возвращающиеся JSON. Вы возвращение простого текста, который содержит некоторые JSON:

 echo "price: ", json_encode($PRICE), "\n"; 
      ^^^^^^^^^^ 

Что бы выглядеть

price: "$9.99" 

, который НЕ действительного JSON.

Вы должны возвращать массив для кода JS для работы:

echo json_encode(array('price' => $PRICE)); 

который бы выход:

{"price":"$9.99"} 
0

Первое, в запросе Ajax, добавьте этот параметр:

dataType : 'json' 

Тогда ваш ответ не правильный json. Вы можете вернуть это:

echo json_encode(array("price"=>$PRICE)); 
Смежные вопросы