У меня есть функция, которая извлекает информацию из базы данных 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() после каждого вызова функции в функции базы данных и не получил сообщение об ошибке после любого из них.
Вы вообще пытались отладить, чтобы сузить проблему? Почему вы не обрабатываете возможные ошибки БД в своем коде? –
@Mike Brant Я не знаю других методов отладки, которые я не пробовал. Какие еще вещи я мог бы попробовать, о которых я не упоминал выше? – Jason247
Я напечатал mysql_error() после каждого вызова функции в функции базы данных и не получил сообщения об ошибке после любого из них. – Jason247