jquery ajax - 使用Joomla传递复选框值

时间:2013-01-04 16:34:17

标签: jquery joomla

我有一个带有许多复选框的html表:

<table id="webcam-table" class="pretty">
    <thead>
    <tr>
        <th>Camera Name</th>
        <th>Date Created</th>
        <th>Video Size</th>
        <th>Video Length</th>
        <th><input type="checkbox" name="checkboxselectall" title="Select All" />
        <button type="submit" class="deletebutton" name="delete_video" title="Delete the selected videos">Delete</button></th>
    </tr>
    </thead>
    <tbody>
        <form name="myform" action="">
        <tr >
            <td onclick="DoNav('<?php echo $url; ?>');">
                        <?php echo $this->result_videos[$i]["camera_name"]; ?> 
            </td>
            <td onclick="DoNav('<?php echo $url; ?>');">
                        <?php echo setlocalTime($this->result_videos[$i]["video_datetime"]); ?> 
            </td>
            <td onclick="DoNav('<?php echo $url; ?>');">
                        <?php echo ByteSize($this->result_videos[$i]["video_size"]); ?>
            </td>
            <td onclick="DoNav('<?php echo $url; ?>');">
                        <?php echo strTime($this->result_videos[$i]["video_length"]); ?>
            </td>
            <td>
            <input type="checkbox" value="<?php echo $this->result_videos[$i]["video_name"]; ?>" title="Mark this video for deletion"/>
            </td>
        </tr>

有一堆代码我省略了构建表的PHP代码。请注意,输入类型复选框值返回视频的名称。这是删除视频所必需的。我的jquery代码用于处理每个视频的值:

jQuery(".deletebutton").on("click", function() {
    if (confirm("Are you sure you want to delete the selected videos?"))
    {
        var values = [jQuery('input:checkbox:checked').map(function () {
            return this.value;
        }).get()];
        alert(values);
        var $this = jQuery(this);
        jQuery.ajax({
            url: 'index.php?option=com_recordings&task=deletevideos&videonames=+values+&format=raw',
            type: "POST",
            success: function(data){
                $this.closest("tr").remove();
            }
        });
    }
});

用户可以选择一个或多个复选框,然后点击删除按钮。这应该返回复选框的值(所有视频名称),它们被删除,我删除表中的行。

这是问题所在。我正在使用Joomla组件开发,所以我传递了url中的值。这些视频的名称太长了。有人可以选择最多100个视频名称,这会使网址字符串太长。有人可以提出替代方案吗?

编辑:我根据@Dasun反馈将其更改为数组。请参阅上文values。如果我用以下方法测试这个值:

alert(values);

我得到的输出看起来像是:blah.mp4,foo.mp4,bar.mp4。我所期待的。但每个视频名称都在我不想要的查询字符串上。要么我没有正确创建数组,要么我不明白你如何只传递数组对象而不是查询字符串上数组的全部内容。

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,请在下面帮助你。

使用Joomla表示法检索数据。

$array_json = JRequest::getVar('data', 0, ''); 

根据要求更新了答案。

您可以使用AJAX传输所有数据。

$.ajax({
  type: 'POST',
  url: 'index.php?option=com_recordings&task=deletevideos&videonames=+values+&format=raw',
  data: values,
  dataType: 'json',
  success: function(result) {
   alert('done');
  },
  error : function() {
   alert('error');
  } 
  });

在PHP级别检索它们,如上所示(getVar)。然后解码通过AJAX发送的数据。使用json_decode将解码JSON字符串。 Read more

EG:

$x = json_decode($array_json);
print_r($x);

如果您有任何问题,请告诉我。

答案 1 :(得分:0)

也许如果你的请求是你的PHP代码中的POST你将会寻找$ _POST ['videonames'] 然后你把它们作为请求的数据参数传递给它。

也是为了通过GET它看起来像

   &videonames[0]=values[0]&videonames[1]=values[1]

也许这段代码可行:

   $.ajax({
     type: 'POST',
     url: 'index.php?option=com_recordings&task=deletevideos&format=raw',
     data: { 'videonames': values},
     dataType: 'json',
     success: function(result) {
      alert('done');
     },
     error : function() {
      alert('error');
     } 
     });