2015-08-21 176 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), 「\ n」;'〜這意味着你是返回一個字符串,而不是一個JSON對象。如果你打算使用json數據,php應該這樣做:''echo json_encode(array('price'=> $ price));'' – RamRaider

回答

1

下面的頭添加到您的腳本:

標題( '內容類型:應用程序/ JSON'); header(「Content-Disposition:inline; filename = ajax.json」);

也改變了線路

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

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

希望幫助

3

你不返回JSON。你返回其中包含了一些JSON純文本:最好看起來像

price: "$9.99" 

這是有效的JSON

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

您需要返回的數組,你的JS代碼的工作:

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

這將輸出:

{"price":"$9.99"} 
0

的第一件事情,在你的Ajax請求,加上這個參數:

dataType : 'json' 

然後,你的迴應是不正確的json。 您可以返回此:

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