【问题标题】:Sort using jquery and php使用 jquery 和 php 进行排序
【发布时间】:2009-05-04 06:40:58
【问题描述】:

这段代码有什么问题,它第一次工作,然后当我再次构建标头时出现错误,说 From is undefined

jQuery

function sort(tableHeader,sortDir)
{
 $.ajax({
 url: "sort.php",
 type:"get",
 data: "tableHeader="+tableHeader +"&sortdirection="+sortDir,
 success:function(data){
 $("#t1").html(data);}});}

php

  $table_Header=$_GET['tableHeader'];
  $sort_Dir=$_GET['sortDir'];

 if ($table_Header == 'From')
 {
   $sort_By = 'player_name';
 }
 else if ($table_Header == 'To')
 {
  $sort_By = 'player_name';
 }   
 else if ($table_Header== 'Gr')
 {
   $sort_By = 'grp_abr';
 }

 if (isset($sort_Dir) && $sort_Dir == 'DESC')
 {
    $sort_Dir = 'DESC';
 }
else
  {
    $sort_Dir = 'ASC';
  }

   $str = stripslashes('From');
   echo $sortBy;
   $result = mysql_query("SELECT * FROM messages,Player
   where player_id = from_user
   ORDER BY player_name ".$sort_Dir);
   echo "<thead>
   <tr>
   <th style='color:royalblue;'>•</th>
   <th align='center'>Time</th>
   <th align='left' onClick='sort('From',$sort_Dir);'>De:</th>
   <th align='left'>To:</th>
   <th align='left'>Gr</th>
   </tr>
   </thead> ";

  while($row = mysql_fetch_array($result))
  {
  echo "<tbody>
  <tr class='highlight'>
  <td width='30' align='center' style='color:royalblue'>"."•"."</td>
  <td width='70' align='left'>".$row["Time_Date"]."</td>
  <td width='600' align='left'>".$row["player_name"]."</td>
  <td width='600' align='left'></td>
  <td width='100' align='left'></td>
  <tr class='highlight'>
  <td></td>
  <td colspan='4'>".$row["msg_desc"]."</td></tr>
 </tbody>";
  }

【问题讨论】:

  • 请指定“重新构建标题”。 sort() 函数的后续调用?重新加载页面?还有什么?这些调用何时以及如何发生?谢谢。
  • ...哦,我忘了:第一次调用 sort() 的时间和方式是什么?
  • 最后但同样重要的是:您在哪个浏览器(和相关版本)上运行此程序?
  • 为什么不试试datatables.net 进行排序

标签: php jquery sorting


【解决方案1】:

在查看您的源代码之后,根据我的观察。

sort.php:12 &gt;&gt;&gt; 用于排序方向的 $_GET 数组元素输入错误:您将其称为 $_GET["sortDir"],而 javascript sort() 函数使用查询字符串中名为 'sortdirection' 的变量组成 ajax 请求。

sort.php:28 &gt;&gt;&gt; 您不需要在这里颠倒排序顺序,因为您的 javascript 函数 sortDirection() 已经这样做了。因此,第 28 到 35 行和第 44 行的注释不使用 php 变量 $sort_Dir,而是使用 javascript 变量 sortDir

user.php:48 &gt;&gt;&gt; 确定当前排序顺序的比较是针对字符串文字"Desc" 进行的,而通常您使用"DESC" 作为此变量的值,所以第一次尝试很好,但第二次根本什么也没做,由于字符串之间的二进制比较,"DESC" 与 Javascript 中的 "Desc" 不同。因此,将 "Desc" 更改为 "DESC" 到您的 sortDirection() 函数中。

这应该让你的东西正常工作。

【讨论】:

    【解决方案2】:

    首先我会尝试将onClick='sort('From',$sort_Dir);'sort(...) 周围的单引号切换为双引号,当你在php 字符串中时,用反斜杠转义它们,这样:

    onClick=\"sort('From',$sort_Dir);\"
    

    其次,在同一个 sn-p 中,您传递了 $sort_Dir,它将由 php 转换为 ASC 或 DESC。因为在这样的字符串中,您正在编写一些要插入到文档中某处的源 html 代码,所以让单词 ASC 或 DESC 出现时不带引号会混淆 javascript 解析器。

    所以你应该像这样改变 onClick 的东西:

    onClick=\"sort('From','$sort_Dir');\"
    

    但正如我在评论中所说,您应该提供有关第一次(也是唯一一次成功)调用 sort() 的更多详细信息(何时发生,如何发生等)。

    试试这个看看。

    【讨论】:

    • 感谢 Scarlet 的回复,第一次是在我第一次创建表头时从主页调用 index.php index.php From: 现在我应该在哪里添加排序方向
    • 我在 Mozilla firefox 和 safari 上运行
    • 您好,莎拉,您是否已经尝试过我建议的更改?请让我知道他们是否在工作。如果他们不让我定义一些测试用例: a) 第一次加载页面;函数 sort() 执行了吗?它有效吗? b) 您第一次点击“发件人”标题;排序()有效吗? c) 您再点击“发件人”标题 5 次; sort() 每次都有效吗?让我们从这里开始,如果我们不以这种方式来解决问题,我想如果不看整个代码,我无法帮助您,对不起。
    • 没问题,我是新手,我可以使用一些帮助您告诉我的更改使错误消失了您的其他问题一旦单击“发件人”就会执行排序并且第一次工作正常然后排序方向变得不确定
    • 好的,我需要更多详细信息来提供帮助,例如“变得未定义”是指不再识别作为变量的 sortDir 还是指页面的错误行为?顺便说一句,我建议您检查 sortDirection() 函数的调用(例如,谁在调用它以及何时调用它),因为您的 php 代码直接使用 sort() 。 hth.
    猜你喜欢
    • 1970-01-01
    • 2010-10-19
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    相关资源
    最近更新 更多