使用ajax时,工作数据库功能不起作用

时间:2013-11-20 17:07:53

标签: javascript php mysql ajax

我有一个从mysql数据库中提取信息的函数。该函数已经过测试,并且可以在从常规html表单提交按钮调用时使用。但是,我一直在尝试实现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;
    }

据我所知,一切似乎都没问题。我在$ conn和$ stmt上做了一个print_r,然后我回到了我的期望。我将这些与工作函数上的那些对象的print_r进行了比较,我得到了相同的结果。我已经打印了execute函数的结果,它返回true。查询从使用常规表单提交时从未改变。传入的值$ 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);
      }
  }
}

这是ajax调用的脚本:

<?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-&gt; PrintCart();在ajax调用的脚本的末尾打印它应该是什么,它被放置在id为“cartView”的元素中,它只是不包括应该从数据库函数中提取的任何数据。

localConnection(); itemUPCsearch函数中调用的函数位于ajax调用的脚本开头包含的databaseConnection.php脚本中。我也在我的主脚本中调用该脚本,但我不认为这是一个问题。我没有得到任何冲突错误,如果我取出include语句,它会给出一个错误,它找不到localConnection()函数。

考虑到函数中的所有内容都是正确的,我不明白出了什么问题。任何帮助将不胜感激!

修改

我在数据库函数中的每个函数调用之后打印了mysql_error(),并且在它们之后没有收到任何错误消息。

1 个答案:

答案 0 :(得分:0)

好的,我终于找到了问题所在。在ajax调用的脚本中,我调用了intval($ _ GET ['upc'])。 intval函数是问题所在。将其更改为$ upc = $ _GET ['upc']解决了问题。