2

所以我有一个 php 循环,我正在使用 jquery 幻灯片切换来隐藏/显示带有 sql 结果的表。目前该表仅使用 php 加载,但由于存在很多导致一些加载问题的问题,我需要使用滑动切换 btn 触发 ajax,因此它仅在按下按钮时请求当前项目的详细信息。我可以让它从 jquery 调用 php 文件,但我很难传递每个项目的值,所以它可以在数据库上执行请求。这是 php foreach 循环内容的样子;

<span class="searchitem">
  // some visible content here 
  <span value="item name" class="btn">button</span>
  <span class="slide_area">
    // hidden slide content ajax needs to populate with php result
  </span>
</span>

这个html重复我使用jquery slidetoggle隐藏slide_area,我需要做的是用来自php的结果填充slide_area,php文件需要名称来返回结果名称是通过带有url的get传递的,所以我只需要从 btn 的值中附加带有实际名称的 url,我确定这不会那么困难,但我在这里。

这是jQuery:

<script type="text/javascript">
//<![CDATA[  
    $(document).ready(function ()
              {
                    $('.searchitem').each(function () {
                        $(this).find('.slide_area').hide();
                        $(this).find('.btn').click(function ()
                        {
                            var ajax_load = "<img src='images/spinner.gif' style='width:50px;' alt='loading...' />";  
                            var loadUrl = "ajax/item.php?name=";    
                            var loadName = $(".btn");
                            var Name = URLEncode(loadName);
                            var loadString = loadUrl + Name;
         $(this).parent().find('.slide_area').slideToggle(1500).html(ajax_load).load(loadString);
                        });
                    });
              });
 //]]>
 </script>

我需要从 btn 获取值并附加 loadURL,如果需要,我可以通过 post 等不同的方式发送数据,更新 jquery 仍然无法正常工作我在这里做错了什么?

谢谢。

4

1 回答 1

1

最简单的方法是使用 Phery 库http://phery-php-ajax.net/ 这里的关键是data-phery-remote="toggle"点击时会自动调用 PHP 函数,并且可以在任何地方重用

<span class="searchitem">
  // some visible content here 
  <span value="item name" data-phery-remote="toggle" class="btn">button</span>
  <span class="slide_area">
  // hidden slide content ajax needs to populate with php result
  </span>
</span>

逻辑相反,负载将只发生一次 AJAX 调用,而不是两次。

Phery::instance()->set(array(
  'toggle' => function($data){
    $r = new PheryResponse;
    /* do your code, fill $html_content */
    $r->this()->siblings('.slide_area')->html($html_content)->toggle();
    return $r;
  }
))->process();
于 2012-11-12T03:38:31.467 回答