我有一个从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(),并且在它们之后没有收到任何错误消息。
答案 0 :(得分:0)
好的,我终于找到了问题所在。在ajax调用的脚本中,我调用了intval($ _ GET ['upc'])。 intval函数是问题所在。将其更改为$ upc = $ _GET ['upc']解决了问题。