2016-11-26 4 views
0

Хорошо, так что этот человек терзал мой мозг. У меня есть следующая страница product_main.php. Это моя основная страница отображения продукта для моего приложения. Я использую следующий код для отображения продуктов на основе ссылки определенной категории на другой странице. Это прекрасно работает и отображает продукты, основанные на их категории:Результат эхо-php-массива вне цикла while - для обновления html div с помощью jquery

<?php 

    $q = $_GET['cat']; 

    include 'db_connect.php'; 

    $result = mysqli_query($con, "SELECT * FROM product_info WHERE ProductCat= '".$q."'"); 

    while($row = mysqli_fetch_array($result)) { 

     $pro_id = $row['ProductID']; 
     $pro_tit = $row['ProductTitle']; 
     $pro_des = $row['ProductDesc']; 
     $pro_img = $row['ProductImg']; 

     echo " 

     <div class='product-display'> 
      <img id='prodImage' src='Images/$pro_img.jpg' alt='product photo'> 
      <h3>$pro_tit</h3> 
      <h3>$pro_des</h3> 
     </div> 

     "; 

    } 
?> 

Теперь то, что я хочу сделать, это добавить фильтр падение вниз, чтобы выбрать другую категорию в то время как на той же странице. У меня есть следующий код, чтобы захватить выход function_load_product.php и обновить DIV элемента на моей странице:

<script> 

function selectCat(str) { 
if (str == "") { 
    document.getElementById("prodArea").innerHTML = ""; 
    return; 
} else { 
    if (window.XMLHttpRequest) { 
     // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
    } else { 
     // code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() { 
     if (this.readyState == 4 && this.status == 200) { 
      document.getElementById("prodArea").innerHTML = this.responseText; 
     } 
    }; 

    xmlhttp.open("GET","function_load_product.php?cat="+str,true); 
    xmlhttp.send(); 
    } 
} 

</script> 

Это снова работает отлично в «попытке», чтобы захватить выход из function_load_product.php.

Я думал, что, используя тот же код, что и на главной странице дисплея, я бы получил ту же функциональность, но у меня, похоже, возникли проблемы с отображением чего-либо.

Я думаю, что я сузил его до проблемы с областью - с JQuery, не возвращающим ничего, поскольку оператор эха содержится внутри цикла while.

Я попытался использовать следующий код, так как это помогло мне в другом проекте вернуть таблицу результатов из файла PHP в HTML-документ и обновить div. К сожалению, это тоже не работает! - Он просто возвращает пустой DIV на главную страницу:

<?php 

    $q = $_GET['cat']; 

    include 'db_connect.php'; 

    $result = mysqli_query($con, "SELECT * FROM product_info WHERE ProductCat= '".$q."'"); 

echo "<div class='product-display'>"; 

while($row = mysqli_fetch_array($result)) { 

     echo "<img id='prodImage' src='Images/" . $row['ProductImg'] . ".jpg' alt='product photo'>"; 
     echo "<h3>" . $row['ProductTitle'] . "</h3>"; 
     echo "<h3>" . $row['ProductDesc'] . "</h3>"; 

    } 

    echo "</div>"; 

?> 

Не совсем уверен, куда идти отсюда и быть честным у меня есть трусливое подозрение, что я приближаюсь всю идею «фильтра продукт» в наименее эффективным путь возможно! Любые указатели оцениваются ....

EDIT - О, и я также попытался использовать глобальные переменные, а затем повторить результат за пределами цикла while, но он просто вернул пустой результат на главную страницу продукта.

ИСКЛЮЧИТЕЛЬНЫЙ ОТВЕТ: Это было что-то маленькое все время! Это был вариант кода у меня был:

<div class="product-filter-bar"> 
     <div> 
      <form class="product-filter-cat" onchange="selectCat(this.value)"> 
      <select> 
       <option>Select a category:</option> 
       <option>Top</option> 
       <option>Jacket</option> 
       <option>Dress</option> 
       <option>Jeans</option> 
       <option>Skirt</option> 
      </select> 
      </form> 
     </div> 
    </div> 

Но это должно было быть:

<div class="product-filter-bar"> 
     <div> 
      <form> 
      <select class="product-filter-cat" onchange="selectCat(this.value)"> 
       <option>Select a category:</option> 
       <option>Top</option> 
       <option>Jacket</option> 
       <option>Dress</option> 
       <option>Jeans</option> 
       <option>Skirt</option> 
      </select> 
      </form> 
     </div> 
    </div> 

** Я просто был вызов функции, прикрепленную к «форме» метки и должен был он прикреплен к тегу «select».

+0

Здесь нет jQuery. Неверный тег? –

ответ

0

Попробуйте использовать инструменты разработчика в вашем браузере, чтобы сделать консольный журнал в ответ на запрос ajax. Это позволит вам увидеть, что что-то возвращается и сузить, это вы PHP или ваш Javascript.

Мой сценарий Java ржавый, но вы уверены, что xmlhttp.onreadystatechange работает правильно?

+0

Не слишком уверен, как сделать console.log с выходом javascript? (очень ограниченное знание этого); однако у меня есть echo «hello» в моей функции_load_product.php, и это правильно отображается на моей странице отображения продукта, поэтому кажется, что код jquery выполняется так, как предполагалось.Я также получаю «пустое» поле div (только одно), которое соответствует стилю, который я использовал на моей главной странице отображения (только ни один из содержимого базы данных). – basil3

+0

ОК. Это хорошо. Следующее, что я хотел бы попробовать, - посмотреть, какое значение $ q находится в скрипте, записав его в журнал, подобный этому [http://stackoverflow.com/a/15530298/409556](http://stackoverflow.com/a/15530298/409556) – hayres

+0

Правильно ... Мне удалось создать error_log в соответствии с руководством. Я запускал функцию function_load_product.php в браузере напрямую и использовал:? Cat = Top - только для проверки работы php. Он возвращает все правильное содержимое на основе параметра. Я добавил error_log в цикл while и, как и предполагалось, вывел значение «q» в качестве параметра, заданного в URL-адресе x, количество строк в базе данных. Когда я запускаю код из product_main.php, сообщение об ошибке не создается? Поближе, но это меня смущает, почему я не получаю возвращенные данные ??? – basil3