Javascript PHP跨页面传递数据

Javascript PHP跨页面传递数据,javascript,php,html,performance,Javascript,Php,Html,Performance,我正试图找出在(某种程度上)特定场景中使用PHP跨两个页面(从A页到B页)传递数据的最佳方法: 第A页:带有标题的图像库。要创建此页面,在PHP文件中对一个images表进行数据库调用,该表包含图像id、图像位置和图像标题。它获取表中存在的所有图像,并使用for循环将它们全部返回到屏幕。它在每个图像的锚定标记上创建一个指向B页的href 第B页:图像的放大视图。当用户单击页面a上的图像时,会将他们带到一个具有更大图像视图的新页面 为了实现这一点,我目前正在使用包含图像id的参数在A页中包含图像的

我正试图找出在(某种程度上)特定场景中使用PHP跨两个页面(从A页到B页)传递数据的最佳方法:

第A页:带有标题的图像库。要创建此页面,在PHP文件中对一个images表进行数据库调用,该表包含图像id、图像位置和图像标题。它获取表中存在的所有图像,并使用for循环将它们全部返回到屏幕。它在每个图像的锚定标记上创建一个指向B页的href

第B页:图像的放大视图。当用户单击页面a上的图像时,会将他们带到一个具有更大图像视图的新页面

为了实现这一点,我目前正在使用包含图像id的参数在A页中包含图像的每个锚点上放置一个href。然后,在B页上,我使用传入的id进行另一次数据库调用,以再次获取图像标题、位置等

在我看来,在我已经在上一页检索了所有需要的数据的情况下进行第二次数据库调用是错误的。在我看来,只有三个体面的选择对我来说都是不好的:

  • 多个数据库查询-如上所述。似乎效率低下

  • 获取-不只是在A页的href中包含图像id,而是在href中包含所有需要的参数。请注意,我实际上不止有三个参数,可能需要传递15个以上的值。拥有如此庞大的url并在url中传递图像位置之类的信息似乎是错误的

  • POST-使用
    POST
    方法在页面上为每个图像创建一个表单。在表单中为每个需要从
    第a页
    传递到
    第B页
    的参数设置一个隐藏字段。同样,对于我来说,拥有大量不必要的标记是一个非常糟糕的主意,而且会变得非常混乱

有没有人对这些方法有任何意见,或者有更好的想法?随着我的发展,我发现自己对效率提出了质疑,对我来说,反复调用这么多数据库做同样的事情是没有意义的。我希望能够对一个图像进行一次数据库调用,然后在该会话中再也不必这样做

(注意,
JavaScript/jQuery
是我的一个选项)


谢谢

我只想做您正在做的事情,但要使用函数。该函数将具有

SELECT * FROM table WHERE id = $imageid
传递所需图像的ID,如果
$imageid
中没有值,则显示全部。这样,在A页上,您就可以使用它来获取图像,然后只需使用ID的POST或get,您就可以运行相同的函数来获取ID的结果

我想说,这样做不太麻烦,但再说一次,我就是这么做的

总的来说,做这样的事情:

function getImage ($imageid) {

  if($imageid == ""){
    $result = mysqli_query($con,"SELECT * FROM table");
    return $result;

  } else {
    $result = mysqli_query($con,"SELECT * FROM table WHERE id = $imageid");
    return $result;

  }
}

使用jquery,您不必进入下一页。您只需执行以下操作:

$('div#largeImageDisplay').hide(); // Div to display large image on. You can style however you want

$("a.linkClass").on("click", function(e) {
    sImagePath = $(this).children("img").attr("src"); // use replace function to change path to the one you want 
    sImageTitle = $(this).attr("title");

    $('div#largeImageDisplay').empty();
    $('div#largeImageDisplay').html("<h3>"+sImageTitle+"</h3><img src='"+sImagePath+"'/>");

    e.preventDefault();

});
$('div#largeImageDisplay').hide();//要在其上显示大图像的Div。你可以随心所欲
$(“a.linkClass”)。在(“单击”上,函数(e){
sImagePath=$(this.children(“img”).attr(“src”);//使用replace函数将路径更改为所需的路径
sImageTitle=$(this.attr(“title”);
$('div#largeImageDisplay').empty();
$('div#largeImageDisplay').html(“+sImageTitle+”);
e、 预防默认值();
});

web的现实是,您每次都需要发出HTTP请求以从服务器获取一些数据。如果重新加载页面,浏览器将再次发出HTTP请求以再次获取该数据。HTML5有很多解决上述问题的方法

  • Web存储-将值作为键值对存储在客户端
  • Web SQL数据库-与SQL相同
  • IndexedDB-介于Web存储和Web SQL数据库之间
  • 您需要从映像中创建base64字符串,并将该字符串存储在Web存储或WebSQL数据库中。您可以在javascript文件中将图像的代码写入base64,然后使用HTML5API将字符串存储在数据库中


    请查看此页面--

    会话数组是否合适?那么对于B页使用AJAX?第三个选项是使用会话,但我认为对于您来说,在会话中管理太多信息。从您的查询来看,您似乎希望最小化DB调用。在这种情况下,使用memcache作为DB和PHP应用程序之间的中间层。在您的例子中,您可以将图像数组存储在memcache中,并在第二页从memcache中检索它。我实际上考虑过使用会话,但估计需要存储大量数据(可能有大约1000个图像,每个图像有15个属性)。然后每个用户都有自己的会话。@VineeshPoduval感谢memchache的想法,我不知道这一点。将接受此作为首要答案。否,使用on()函数。我在最新的jquery库上使用live,它工作得很好。
    live()
    方法在jquery 1.7版中被弃用,在1.9版中被删除。请改用
    on()
    方法。我之所以不这样做,是因为我想更改页面/新URL。此外,还有一些在第一页上没有显示的信息需要在第二页上显示。要做到这一点,我必须将这些信息隐藏在页面上的某个地方。谢谢,我想我的思路是对的。尽管我喜欢Vinesh减少数据库调用数量的memcache想法。