【问题标题】:Pass PHP variables without using href in Bootstrap tabs在引导选项卡中不使用 href 传递 PHP 变量
【发布时间】:2014-08-12 05:39:25
【问题描述】:

我正在尝试使用 <a> 标记和使用 Bootstrap 选项卡在同一 PHP 页面上的 data 属性发送 PHP 变量:

HTML(引导选项卡选项):

<a style='padding:20px;' href='#tab_e' data-page='$page' class='passrss' data-rssid='$rssid' data-toggle='tab'>Test</a>

PHP(存储在#tab_e 选项卡中):

$rsspassedid = GET $rssid from the a tag (data-rssid)

我想在单击时获取存储在 data-rssid 中​​的值并将其传递给同一 PHP 文件中更下方的变量,这样当使用 #tab_e 打开选项卡时,mySQL 语句将基于$rssid 中​​提供的值并显示查询结果。我不确定是否需要任何 jQuery/AJAX,但是否可以获取存储在 PHP 中 &lt;a&gt; 标记的 data 属性中的数据?

更新

我已经尝试将变量存储在分页链接中,但仍然没有成功,这是我创建的 XHR 对象:

<script>
$(document).ready(function () {

    $('.passrss').click(function () {
        $('span.pass-tabe').load('tabe.php?rssid=' + $(this).data('rssid') + '&page=' + $(this).data('page'));
    });

    }); 
</script>

Tabe 将存储在 a 标签中的变量传递给单独的 php 文件 (tabe.php),然后使用 &lt;span class="pass-tabe"&gt;&lt;/span&gt; 加载到浏览器中,至于分页 - 链接存储在 tabe.php 文件中,但它们引用返回主 php 文件,因此分页无法正常工作,例如

originalphpfile.php?page=$page&rssid=$rssidpassed&pageurl=$x#tab_e

注意:$rssidpassed 存储在从 XHR 对象获取的 tabe.php 中,例如

$_GET['rssid']

更新 2

我在下面添加了分页代码,目前我遇到了问题,它存储在 tabe.php 中:

$perpage = 10;
$pageurl = (isset($_GET['pageurl'])) ? (int)$_GET['pageurl'] : 1;
$start = ($pageurl - 1) * $perpage;

$pagequery = mysql_query("SELECT COUNT('topic_id') FROM topic WHERE cat_id='$page' AND topic.users_id = '$rssid'");
$pagination = ceil(mysql_result($pagequery, 0) / $perpage);

//query goes here

//pagination numbers
if($pagination >= 1){
    echo "<div style='text-align:center;'><ul class='pagination'>";
    for($x=1; $x<=$pagination; $x++){
    echo ($x == $pageurl) ? "<li class='active'><a href='originalphpfile.php?page=$page&pageurl=$x#tab_e'>$x</a></li>":"<li><a href='originalphpfile.php?page=$page&pageurl=$x#tab_e'>$x</a></li>"; 
    }
    echo "</ul></div>";
}

当我点击分页链接时,它不会加载第二、第三等结果集,因为它会返回到 originalphpfile.php

有什么解决办法吗?

【问题讨论】:

  • 您需要使用 Ajax 才能实现此功能。任何点击事件都表明您已将 HTML/CSS/JS 发送到客户端。因为客户端需要再次与您的服务器通信以获取 MySQL 查询的结果,所以您需要一个新的请求才能这样做。本质上,没有直接的方法将 php 传递给 mysql 查询。您可以将其呈现为属性值,使用 jQuery 检索它,然后将其发送回服务器。
  • 我不太清楚该怎么做,我通过将数据属性发送到外部 PHP 文件并将其加载回#tab_e 来创建一个 XHR 对象。虽然这可行,但它不适用于分页,因为选项卡式内容正在发送到外部 PHP 文件。我不确定是否有办法将 rssid 的数据属性存储在 AJAX 中并将其作为要存储在同一个 PHP 文件中的值返回
  • 您需要了解请求/响应周期。大多数网站都是以这种方式设置的,因此没有状态。状态是“昂贵的”。客户端需要存储此信息并格式化请求,以便 PHP 读取并响应。如果您想要分页,请将这些变量存储在客户端上,并将它们与构建 PHP 响应的请求一起发送。
  • 这很难读,你能用代码块中的那个来更新你的原始帖子吗?更新:您还可以包含您的 MySQL 查询吗?更新 2:请将您的 jQuery、PHP 和 MySQL 放在您原始帖子中的 ### Update ### 块中,以便我可以帮助您。
  • 我看到了$(this).data('page'),但我在任何地方都没有看到... data-page="??"...data-page 属性位于哪个元素上?

标签: php jquery ajax twitter-bootstrap


【解决方案1】:

问题已解决,我将 AJAX 回显到 tabe php 文件并更改了分页 HTML 链接:

tabe.php 分页链接:

<a href='#tab_e' class='passrssurl' data-rssid='$rsspassedid' data-url='$x' data-page='$page' data-toggle='tab'>

tabe.php 回显 AJAX:

echo "<script>
$(document).ready(function () {
    $('.passrssurl').click(function () {
    $('span.pass-tabe').load('tabe.php?rssid=' + $(this).data('rssid') + '&page=' + $(this).data('page') + '&pageurl=' + $(this).data('url'));
    });

}); 
</script>";

【讨论】:

    【解决方案2】:

    我将继续把它变成一个答案,因为我们的评论块越来越长了。

    在您的 PHP 模板中,要将 PHP 变成有用的东西,您需要执行以下操作:

    // file1.php
    // notice <?= ?> is quick echo, the same as <? echo $rssid; ?>
    <a style='padding:20px;' href='#tab_e' data-rssid='<?= $rssid ?>' data-toggle='tab'>Test</a>
    

    根据帖子,我认为,在您的 javascript 中,您获得 $rssid 的原因是因为您没有回显该值。

    // file2.php
    $page = array_key_exists($_GET,'page') && is_numeric( $_GET['page'] ) ? $_GET['page'] : 1
    // do query i.e select * from x offset $page * $per_page limit $per_page
    
    // do stuff with your pagination in a loop defining an index $number
    <a class="pagination" onclick="getPage(<?= $number ?>)"><?= $number; ?></a>
    

    然后在jquery中:

    // Call this when they click the tab
    var id;
    function setId(id){
       id = id;
       getPage(1);
    }
    
    // call this when they click the pagination
    function getPage(number){
       $('span.pass-tabe').load('tabe.php?rssid=' + $id + '&page=' +number )
    }
    

    请按摩示例代码,好像您正在做一些复杂的事情,并且很难准确掌握您的确切用例。

    【讨论】:

    • 好的,尽可能简单地说,分页工作正常,就像将变量发送到 Web 浏览器 URL,但问题是分页链接指向第 1 页,而不是执行再次将函数加载到tabe.php。例如,当我在分页上单击 2 时,它只加载第一个 XHR 发送的页面 1(原始 PHP),而不是加载第二组结果。所有分页链接都存储在 XHR 对象 php 文件 tabe 中。
    • 我试过使用 $element->getAttribute('data-rssid') 但这似乎不起作用
    • 理想情况下,我想这样做,但我似乎无法让它工作...stackoverflow.com/questions/22334995/…
    • 因为您没有在 SQL 中使用分页。
    • 它在SQL中,如果我正常加载它就可以正常工作,只是当它在XHR中时,当您单击分页链接时,''标签不会再次加载在指向 span.pass-tabe 的分页 url 链接中没有加载函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多