php循环中的ajax对按钮单击执行操作

时间:2012-11-09 14:25:53

标签: php ajax jquery

所以我有一个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传递获取,所以我只需要用btn值的实际名称附加网址,我确定这不是那么难,但我在这里。

这是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,我打开以不同的方式发送数据,如果需要通过帖子,更新jquery仍然不工作我在这里做错了什么?

感谢。

1 个答案:

答案 0 :(得分: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();