2016-07-13 7 views
1

У меня есть 2 части кода (php и javascript). В файле PHP я использую функцию json_encode() для создания JSON data, который будет отправлен в файл Javascript.Показать предупреждение на основе данных json

PHP FIle

<?php 
if(isset($_GET["remove_code"]) && isset($_SESSION["products"])) 
{ 
    $product_code = filter_var($_GET["remove_code"], FILTER_SANITIZE_STRING); //get the product code to remove 

    if(isset($_SESSION["products"][$product_code])) { 
     unset($_SESSION["products"][$product_code]); 
    } 

    $total_items = count($_SESSION["products"]); 

    if($total_items == 0){ 
     unset($_SESSION["products"]); 
    }else{ 
     //Calculate total of items in the cart 
     $total = 0; 
     foreach($_SESSION["products"] as $product){ //loop though items and prepare html content 

      $product_price = $product["price"]; 
      $product_quantity = $product["quantity"]; 

      $subtotal = $product_price * $product_quantity; 

      $total += $subtotal; 
     } 
    } 

    die(json_encode(array('items'=>$total_items, 'total'=>$total))); 
} 
?> 

Javascript Файл

<script> 
    $(document).ready(function(){ 
     $(".contentwrapper .content").on('click', 'a.removebutton', function() { 
      var pcode = $(this).attr("data-code"); //get product code 

      $.getJSON("phpfile.php", {"remove_code":pcode}, function(data) { 

       alert(data.items);// the total number of item 
      }); 
    }); 
</script> 

Anytime запрос $.getJSON("phpfile.php", {"remove_code":pcode}... успешно, появляется предупреждение, показывающий data.items. Проблема, с которой я столкнулся, заключается в том, что когда data.items больше или равно 1, запрашивается предупреждение, но когда data.items равно 0, никаких предупреждений не запрашивается.

Пожалуйста, помогите мне решить эту проблему

+2

Вы добавили строку console.log(), чтобы узнать, идет ли речь об успешном методе. Возможно, добавьте обработчик ошибок в вызов Ajax и посмотрите, вызвано ли это. – epascarello

+0

вызов ajax является успешным. Когда когда 'data.items> = 1', появляется предупреждение, но проблема возникает, когда' data.items = 0' – Prince

+0

Вы уверены, что это происходит в методе успеха ... – epascarello

ответ

1

Похож на ошибку PHP. $ total variable объявляется только в условии «else», поэтому, когда ($total_items == 0) $ total не определено. Но, как вы звонили die(json_encode(array('items'=>$total_items, 'total'=>$total)));, сервер не имеет возможности жаловаться (возможно, не возвращать данные и, следовательно, не получать предупреждения). Если вы попробуете объявить $total = 0 перед своим состоянием, оно также должно устранить проблему, не имея возможности умереть раньше.

+0

Спасибо вам большое. Надеюсь увидеть вас снова в следующий раз. – Prince

0

Одним из возможных вариантов является то, что на самом деле переменных данных не определено/нуль e.t.c. см это, например, второе предупреждение не показано. Вместо этого на консоли браузера отображается ошибка.

var data = {items:0}; 
 
alert(data.items); 
 
data = null; 
 
alert(data.items);

0

Добавление die(json_encode(array('items'=>$total_items))); в конце условия if($total_items == 0) и это решает проблему. Но я действительно не могу объяснить, что происходит. До сих пор я не знаю происхождения проблемы. Любые объяснения будут приветствоваться

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