使用AJAX&无法从数据库获取数据PHP

时间:2015-03-31 18:11:29

标签: javascript php jquery ajax json

更新:此问题的第一部分已经解决,并已在下面使用工作代码进行了更新。 〜

我正在开发一个Javascript应用程序,而且我很难获得AJAX调用。

我可以使用AJAX POST& amp;成功地将数据插入到我的数据库中。 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);
?>

启动PHP&amp;的AJAX听取回声:

function getRandomImage() {

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

我正在尝试使用 alert(数据); 让随机选择的图像位置/地址显示在警告框中(只是为了查看它是否正常工作)。但它不适合我,我很确定我在某个地方犯了错误,我不确定json是否是正确的数据类型?

我希望返回的地址替换当前的img.src = 'image.jpg';,这样当Javascript应用程序启动时,它将从代码的img.src =部分接收随机图像。

感谢您提供任何帮助!

更新

Javascript现在可以在每次加载时正确显示随机地址(使用“alert”或“console.log”)。我的问题的最后一部分涉及如何让.js文件读取此字符串,并将其用作随后获取的图像的位置。

这就是我的游戏设置方式: 我有一个名为“game.js”的文件,它包含游戏运行所需的代码,现在,该代码的一部分是:img.src = 'images/image00001.jpg';此时图像是永久定义的,不会改变。我试图用随机的定义替换这个静态定义。基本上我试图让每个game.js加载时img.src =之后出现随机化地址。

我还需要确保此事件发生在game.js代码的其余部分之前,因为我需要随机选择的图像文件在游戏的其余部分加载之前就位。 我已经尝试通过在game.js文件顶部的AJAX调用中包含img.src=(response)来定义img.src,但它无法将任何图像加载到游戏中。我想这可能是错误的做法吗?

第二次更新

你好@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的新函数,在其中我放置了游戏的代码,然后在这一行调用了这个函数。我不确定这对你来说意味着什么?

不幸的是现在仍然没有图像加载到游戏中,我想再次感谢你花时间帮助我,如果你能提供更多的建议,那将是非常棒的!非常感谢。

2 个答案:

答案 0 :(得分:0)

问题在于你的mysqli_query() 应该是这样的 mysqli_query(连接,查询,resultmode) 需要连接和查询的地方,resultmode是可选的。

实施例: mysqli_query($ conn,&#34; SELECT images FROM images ORDER BY RAND()LIMIT 0,1&#34;);

有关详细信息,请查看 mysqli_query

答案 1 :(得分: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();
?>

data.image函数中以success的形式在JavaScript中获取。

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
});