2013-11-20 3 views
0

У меня есть функция, которая извлекает информацию из базы данных mysql. Эта функция была протестирована и работает при вызове ее из обычной кнопки отправки формы html. Тем не менее, я пытаюсь реализовать ajax, и я называю ту же самую функцию, но она не работает, и я понятия не имею, почему.Рабочая функция базы данных не работает при использовании ajax

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

function itemUPCsearch($upc) 
    { 
     $conn = localConnection(); 
     $query = "SELECT Items.UPC, availability, description, price, brand, perqty, item_type, unit_type, size, discount, serv_per_cal, calories, calories_from_fat, total_fat, saturated_fat, trans_fat, cholesterol, sodium, total_carbohydrate, dietary_fiber, sugars, protein, vitamins, ingredients, full_image_path FROM Items LEFT JOIN Nutrition ON Items.UPC = Nutrition.UPC LEFT JOIN item_pic P ON P.UPC = Items.UPC WHERE Items.UPC = ?"; 
     $stmt = mysqli_prepare($conn, $query); 
     mysqli_stmt_bind_param($stmt, "s", $upc); 
     mysqli_stmt_execute($stmt); 
     mysqli_stmt_bind_result($stmt, $upc, $avail, $desc, $price, $brand, $perqty, $itype, $utype, $size, $discount, $servpercal, $cal, $calfromfat, $totfat, $satfat, $tranfat, $chol, $sod, $totcarb, $dietfib, $sugar, $prot, $vit, $ing, $image); 



     while(mysqli_stmt_fetch($stmt)) 
     { 

       // Execution never makes it inside this loop 
       // Do stuff here (Code has been removed as it is not relevant 
       // To this question) 

     } 
     mysqli_stmt_close($stmt); 
     closeConnection($conn); 

     return $searchItems; 
    } 

Насколько я могу судить, все, кажется, в порядке. Я сделал print_r на $ conn и $ stmt, и я вернусь, чего бы я ожидал. Я сравнил их с print_r этих объектов с рабочими функциями, и я возвращаю те же результаты. Я напечатал результат функции execute и вернул true. Запрос никогда не менялся, когда он работал с обычной формой submit. Значение $ upc, которое было передано, корректно, и в базе данных есть запись. Фактически, когда я копирую и вставляю запрос с помощью значения upc в mysql, я возвращаю правильный результат. По какой-то причине функция никогда не делает ее внутри цикла while, даже если она делает это там, когда вы вызываете эту же функцию, используя сообщение формы, проходя в том же upc.

Вот мой Ajax скрипт:

function loadCart(itemID,cart) { 
    var httpRequest; 
    makeRequest(itemID,cart); 

    function makeRequest(itemID,cart) { 
    if (window.XMLHttpRequest) { // Mozilla, Safari, ... 
     httpRequest = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { // IE 
     try { 
     httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
     } 
     catch (e) { 
     try { 
      httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     catch (e) {} 
     } 
    } 

    if (!httpRequest) { 
     alert('Giving up :(Cannot create an XMLHTTP instance'); 
     return false; 
    } 

    httpRequest.onreadystatechange = fillTheCart; 
    httpRequest.open('GET', "../controller/addToCartAjaxScript.php?upc="+itemID+"&cart="+cart,true); 
    httpRequest.send(); 
    } 

    function fillTheCart() { 
     try { 
     if (httpRequest.readyState === 4) { 
      if (httpRequest.status === 200) { 
      document.getElementById("cartView").innerHTML=httpRequest.responseText; 
      } 
      else { 
      alert('There was a problem with the request.'); 
      } 
     } 
     } 
     catch(e) { 
     alert('Caught Exception: ' + e.description); 
     } 
    } 
} 

А вот скрипт, который Аякса вызовы:

<?php 

    //include_once '../databaseFunctions/session.php'; 
    include_once '../databaseFunctions/databaseConnection.php'; 
    include_once '../databaseFunctions/databaseFunctions.php'; 
    include_once '../controller/TableControllerHeader.php'; 
    include_once '../controller/ShoppingCartControllerHeader.php'; 
    include_once '../controller/UserControllerHeader.php'; 
    include_once '../controller/functions.php'; 

    $upc = intval($_GET['upc']); 
    $cartName = $_GET['cart']; 

    $cart = new Cart(); 
    $customer = new Customer(); 

    print $upc; 

    if($upc != ""){ 
     $cart = addToCart($upc,$cartName); 
    } 
    else{ 
     if(isset($_SESSION['customer'])){ 
      $customer = unserialize($_SESSION['customer']); 
      $cart = $customer->FindCart($cartName); 
      if($cart = null){ 
       $cart = new Cart(); 
      } 
     } 
    } 

    print $cart->PrintCart(); 

?> 

Я знаю, что Ajax работает, потому что печать $ cart-> PrintCart(); в конце скрипта, называемого ajax, печатает то, что ему предполагается, и он помещается в элемент с идентификатором «cartView», он просто не включает какие-либо данные, которые должны были быть извлечены из функции базы данных.

LocalConnection(); функция, вызываемая в элементе itemUPCsearch, находится в скрипте databaseConnection.php, который был включен в начале скрипта, который вызывает ajax. Я также называю этот сценарий в моем основном скрипте, но я не думаю, что это проблема. Я не получаю никаких ошибок в конфликте, и если я выберу оператор include, он дает ошибку, что он не может найти функцию localConnection().

Я не понимаю, что не так, потому что все в функции отображается правильно. Любая помощь будет принята с благодарностью!

Редактировать

Я напечатал mysql_error() после каждого вызова функции в функции базы данных и не получил сообщение об ошибке после любого из них.

+0

Вы вообще пытались отладить, чтобы сузить проблему? Почему вы не обрабатываете возможные ошибки БД в своем коде? –

+0

@Mike Brant Я не знаю других методов отладки, которые я не пробовал. Какие еще вещи я мог бы попробовать, о которых я не упоминал выше? – Jason247

+0

Я напечатал mysql_error() после каждого вызова функции в функции базы данных и не получил сообщения об ошибке после любого из них. – Jason247

ответ

0

Хорошо, я, наконец, понял проблему. В скрипте, который вызвал ajax, я вызывал intval ($ _ GET ['upc']). Проблема заключалась в внутренней функции. Изменение этого параметра на $ upc = $ _GET ['upc'] устранило проблему.

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