2015-03-31 6 views
0

Обновление: Первая часть этого вопроса была разрешена и обновлена ​​ниже с помощью действующего кода. ~Невозможно получить данные из базы данных с помощью AJAX & PHP

Я работаю над приложением Javascript, и мне сложно получить вызов AJAX для работы.

Я могу успешно вставить данные в свою базу данных, используя AJAX POST & PHP, но я не могу извлечь данные из базы данных.

У меня есть приложение Javascript, который использует изображение, в настоящее время он получает это изображение от местоположения в корневой папке, как это:

img.src = 'picture1.jpg'; 

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

Я создал таблицу с одним столбцом и заполнил ее адресами/местоположениями изображений, содержащимися в папке в моем корневом каталоге.

Например:

/images/00001.jpg 
/images/00002.jpg 
/images/00003.jpg 

Это файл PHP (находится в /scripts/imagerandomizer.php) Я использую, чтобы вызвать случайный адрес изображения:

<?php 

session_start(); 

$servername = "localhost"; 
$username = "myusername"; 
$password = "mypassword"; 
$dbname = "mydatabase"; 

// Create connection 
$conn = mysqli_connect($servername, $username, $password, $dbname); 
// Check connection 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 

$sqlrandomize = mysqli_query($conn,"SELECT images FROM `images` ORDER BY RAND() LIMIT 0 , 1"); 

$row = mysqli_fetch_row($sqlrandomize); 
header('Content-Type: application/json'); 
echo json_encode($row); 

mysqli_close($conn); 
?> 

И на AJAX который инициирует слушает PHP & для эха:

function getRandomImage() { 

$.ajax({ 
    url: 'scripts/imagerandomizer.php', 
    data: "", 
    dataType: 'json', 
    success: function(response){ 
     alert(response); 
    }}); 
}; 

Я пытаюсь к нам e предупреждение (данные);, чтобы случайно выбранное местоположение/адрес изображения отображались в окне предупреждения (просто чтобы убедиться, что он работает). Но это не работает для меня, я уверен, что я где-то ошибся, и я не уверен, является ли json правильным типом данных для использования здесь?

Я бы хотел, чтобы возвращаемый адрес заменил текущий img.src = 'image.jpg';, так что, когда приложение Javascript запустится, оно получит случайное изображение из раздела кода img.src =.

Спасибо за любую помощь!

UPDATE:

Javascript теперь может корректно отображать случайный адрес (используя либо «предупреждение» или «console.log») каждый раз, когда он загружен. Последняя часть моего вопроса касается того, как файл .js читает эту строку и использует ее как местоположение изображения, которое он извлекает.

Это как моя игра настроена: У меня есть файл с именем «game.js», он содержит код, необходимый для игры, прямо сейчас, часть этого кода: img.src = 'images/image00001.jpg'; Прямо сейчас, изображение постоянно определено и не изменяется. Я пытаюсь заменить это статическое определение на рандомизированное. В основном я пытаюсь получить рандомизированный адрес, который появится после img.src = всякий раз, когда загружается game.js.

Мне также нужно убедиться, что это событие происходит до остальной части игры.js-код запускается, так как мне нужен случайный выбранный файл изображения, который будет находиться на месте до загрузки остальной части игры. Я попытался определить img.src, включив img.src=(response) в вызов AJAX в верхней части файла game.js, но он не загружает изображения в игру. Я думаю, что, возможно, это неправильный способ сделать это?

второй UPDATE

Привет @PHPGlue Я пытался получить эту работу в течение нескольких дней в настоящее время, но я до сих пор что-то отсутствует.

Это моя функция, чтобы захватить рандомизированное изображение, и я попытался поместить код, чтобы запустить игру в функции успеха if (img.src) {//code to run the game here}:

Function getRandomImage() { 
    $.ajax({ 
    url: 'scripts/imagerandomizer.php', 
    data: "", 
    dataType: 'json', 
    success: function(response){ 

$('#imageId').attr('src', data.image); 
img.src = $('#imageId'); 

if (img.src) { 
//code to run the game here 
} 
     }}); 
}; 

Я определенно не хватает что-то здесь, я думаю, Я не понимаю, что вы имеете в виду правильно. Я бы очень признателен за любые советы по этому поводу и еще раз спасибо за то, что вы нашли время, чтобы посмотреть на мой вопрос!

третье обновление

Привет, мой текущий код:

function getRandomImg(gameFunc){ 
    $.post('scripts/imagerandomizer.php', {randImg:1}, function(data){ 
    var im = $('#imageId'); 
    im.attr('src', data.image); 
    im.load(function(){ 
     gameFunc(img.src=im); 
    } 
    }, 'json'); 
} 
getRandomImg(function(){ 
    javascriptgame(); 
}); 

function javascriptgame(){ 
//in this area I’ve placed all the code to make the game work 
} 

Когда вы сказали /* pass args to gameFunc here */ я вошел img.src=im. (Я не уверен, что я правильно вас понимаю, но я думаю, что я должен определить img.src= для игры, чтобы позвонить в этой линии?

Когда вы сказали // game code here - could also pass function name instead of Anonymous function, я создал новую функцию под названием javascriptgame, внутри которой я поместил код игры, а затем вызвал эту функцию в этой строке. Я не уверен, что это вы имели в виду для меня?

К сожалению, до сих пор загрузка изображения в игру еще не началась, я хочу поблагодарить вас снова за то, что нашли время, чтобы помочь мне в этом, и если бы вы могли предложить больше советов, которые были бы замечательными! Большое спасибо.

+0

просто добавьте эту строку в свой php перед json_encode: header ('Content-Type: application/json'); –

+0

Проверьте журналы ошибок для php и сообщите нам, есть ли там что-нибудь. – JClaspill

+0

Привет @imranqasim & @JClaspill Я добавил '' header ('Content-Type: application/json'); '' к моему коду И я проверил папку Apache, но я не вижу никаких зарегистрированных ошибок. Он все еще не работает. – Emily

ответ

0

Проблема с вашим mysqli_query() Это должно быть как mysqli_query (connection, query, resultmode) Если требуется подключение и запрос, а resultmode не является обязательным.

Пример: mysqli_query ($ conn, "SELECT images FROM images ORDER BY RAND() LIMIT 0, 1");

Для получения более подробной информации, пожалуйста, проверьте mysqli_query

+0

Привет @ shahbaz-masud Спасибо за ваш совет, я добавил «$ conn» к моему PHP-коду, и теперь он, похоже, частично работает, «alert (data)» теперь возвращается «[object Object]», I «Я пытаюсь вернуть ему что-то вроде« /images/00001.jpg », знаете ли вы, почему он неправильно передает эти данные? – Emily

+0

Поскольку сервер предоставляет вам некоторый объект, а не строковое значение, а 'alert' отсасывает при печати объектов. Я предлагаю вам прекратить использование 'alert' и начать использовать' console.log', чтобы узнать, что действительно происходит - гораздо более полезно для отладки. Я верю, что вы возвращаете объект resultset; вы, вероятно, хотите извлечь строку из этой строки на PHP, прежде чем отправить ее обратно. – Amadan

+0

Я знал это, но просто хотел, чтобы вы поняли это. Mysqli_query() вернет объект mysqli_result. Для извлечения данных из объекта можно использовать mysqli_fetch_row или mysqli_fetch_assoc и т. Д. Пример: $ row = mysqli_fetch_row ($ sqlrandomize)) Затем вам просто нужно изменить это значение echo json_encode ($ row); –

0

Сначала вы должны сделать отдельную страницу соединения безопасного PHP

// connection.php 
<?php 
function db(){ 
    return new mysqli('host', 'username', 'password', 'database'); 
} 
?> 

Ты проблема в том, что вы на самом деле не получаете какие-либо результатов, просто делая запрос. Вы все еще должны получить результаты запроса и использовать их в вашем коде:

<?php 
include 'connection.php'; $db = db(); $r = array(); 
if(isset($_POST['randImg'])){ 
    if(+$_POST['randImg'] === 1){ 
    if($iq = $db->query('SELECT images image FROM images ORDER BY RAND() LIMIT 1')){ 
     if($iq->num_rows > 0){ 
     $fi = $iq->fetch_object(); $r['image'] = $fi->image; 
     } 
     else{ 
     // no results were found 
     } 
     $iq->free(); 
    } 
    else{ 
     // connection failure 
    } 
    } 
    else{ 
    // randImg hack 
    } 
} 
echo json_encode($r); 
$db->close(); 
?> 

Получить что в JavaScript, как data.image внутри success функции.

function getRandomImg(gameFunc){ 
    $.post('scripts/imagerandomizer.php', {randImg:1}, function(data){ 
    var im = $('#imageId'); 
    im.attr('src', data.image); 
    im.load(function(){ 
     gameFunc(/* pass args to gameFunc here */); 
    } 
    }, 'json'); 
} 
getRandomImg(function(){ 
    // game code here - could also pass function name instead of Anonymous function 
}); 
+0

Привет @PHPglue спасибо за ваш совет, я обновил свой вопрос с рабочего кода сейчас, и я сделаю изменения соединения и console.log, которые вы предложили в ближайшее время. Я написал еще немного о второй части моего вопроса в обновлении, если вы хотите посмотреть, еще раз спасибо за вашу помощь! – Emily

+0

Элемент должен существовать, прежде чем у вас будет доступ к нему. Конечно, вам нужен правильный путь data.image: '$ ('# imageId'). Attr ('src', data.image);'. 'games.js' должен находиться в папке, где находится папка' images'. Вам нужно будет запустить код игры внутри функции успеха, чтобы сначала загрузить изображение. – PHPglue

+0

Hi @PHPglue Я пытаюсь заставить это работать неделю, но я все еще не могу это обработать, я добавил второе обновление к моему вопросу и задался вопросом, можете ли вы взглянуть на мой код и посоветуйте мне, где я ошибаюсь? Большое спасибо! – Emily

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