0

我有一个脚本,可以在从数据库中相关类别的页面加载时从数据库加载示例图像。

<?php
$category = 'granite'; 
$samples = 'SELECT * FROM material WHERE material_type = :cat';
$res = $db->prepare($samples);
$res->execute(array(':cat' => $category));
$count = $res->rowCount();
if($count > 0) 
while ($row = $res -> fetch()){
    $postimggranite = $row[mat_image];
    $postidgranite = $row[id];
?>
<?php
    echo "<div class='sample'>";
    echo "<h3 class='sample_h'>$row[name]</h3>";
    echo "<a href='/images/granite-worktops/samples/$postimggranite'><img src='/images/granite-worktops/thumbs/$postimggranite' alt='$row[name]' width='100' height='100' class='aligncenter size-full' title='$row[name]'></a>";
    echo "<br /><a class=\"button\" href=\" \" rel=\"nofollow\" onClick=\"user_notice(this,''); return false;\">More Details</a>";
    echo "</div>";
}
?>

正如您在关闭 div 之前的最后一个回显中从上面的脚本中看到的那样,我有一个“更多详细信息”按钮,通过单击屏幕上出现的对话框,我需要显示来自同一数据库的其他信息。我正在计划的方法使用是

function user_dialog(a,b){
    "undefined"!=typeof jQuery.ui?($("#dialog").attr("title","Detailed Information").html(a),
    $("#dialog").dialog({
        modal:true,
        width:400,
        buttons: {
            Cancel: function() {
                $(this).dialog("close");
                },
                Download: function(){
                    $(this).dialog("close");
                    window.location=b
                    }
                    }
                    }
                    ))
                    :window.location=b}

function user_notice(a){
    download_link=$(a).attr("href");
    $.ajax({
        type:"POST",
        url:"/includes/json.php",
        data:"action=reminder&thepath="+download_link,
        dataType:"json",
        error:function(){
            window.location=download_link
            },
        success:function(a){
            1==a.status&&user_dialog(a.html,download_link);
            }
            })
            };

这里还有我的 json.php 文件的脚本

<?php
header('X-Robots-Tag: noindex, noarchive');
$a = session_id();
if(empty($a)) session_start();
if($_SERVER['HTTP_REFERER']){

  $resp_dialog = array(
    'status' => 1,
    'html' => '<p>Here is you sample and rest of staff</p>'
  );
  echo json_encode($resp_dialog);
  }else{
      header('HTTP/1.1 403 Forbidden');
      exit;
      }
?>

很明显,这一切正常,并且该行<p>Here is you sample and rest of staff</p>出现在对话框中,但我真正需要的是创建一个 json 对象,该对象从 DB 带来额外的信息,并且不知道json.php文件内部的位置或创建某种额外的文件并放置在 href用urlid="something to get fromdb"$_GET['urlid']json.php发送它做数据库。基本上不知道做什么和在哪里做。

请放轻松,因为我还在学习这一切,而且大部分内容对我来说还是很新的,所以如果我没有正确解释某些内容,请原谅我。

4

2 回答 2

1

您需要在 $.ajax 中传递您想要详细说明的类别的 ID。

$.ajax({
    type:"POST",
    url:"/includes/json.php",
    data:['cat_id': cat_id], // passing var cat_id from the link... 

那么你的 json.php 文件应该是这样的:

<?php
header('X-Robots-Tag: noindex, noarchive');
$a = session_id();
if(empty($a)) session_start();
if($_SERVER['HTTP_REFERER']){

  $cat_id = $_POST['cat_id']; // Grab the Id of the category you want to detail...

   // Here you have to fetch the info from the DB...
   $samples = '... WHERE cat_id = :cat'; // Create the sql here!
   $res = $db->prepare($samples);
   $res->execute(array(':cat' => $cat_id));
   $count = $res->rowCount();
   $htmlToDisplay = '';
   if($count > 0) 
   while ($row = $res -> fetch()){
    $htmlToDisplay += $row['...']; // format yout output...
  }

  $resp_dialog = array(
    'status' => 1,
    'html' => $htmlToDisplay,
  );
  echo json_encode($resp_dialog);
  }else{
      header('HTTP/1.1 403 Forbidden');
      exit;
      }
?>

编辑:

要创建“更多详细信息”链接,请尝试执行以下操作:

echo "<div class='sample'>";
/* ... */
// Passing $row[id] to user_notice() function!
echo "<br /><a class=\"button\" onClick=\"user_notice(this,". $row[id] ."); return false;\">More Details</a>";
echo "</div>";

然后,将user_notice()函数更改为:

function user_notice(a,cat_id){ // New parameter cat_id!
    download_link=$(a).attr("href");
    $.ajax({
        type:"POST",
        url:"/includes/json.php",
        data:{ cat_id: cat_id }, // Passing cat_id to json.php... don't forget to pass your other variables
        /* ... */

在此处查看如何通过 $.ajax 传递变量

于 2013-04-15T14:06:54.503 回答
0

在 $.Ajax() 函数中更改您传递的数据

data:"action=reminder&thepath="+download_link,

data: "{'action':'reminder','thepath':'"+download_link+"'}"
于 2013-04-15T13:58:44.897 回答