【问题标题】:jquery ajax - passing checkbox values with Joomlajquery ajax - 使用 Joomla 传递复选框值
【发布时间】:2013-01-04 16:34:17
【问题描述】:

我有一个带有多个复选框的 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 个视频名称,这会使 url 字符串太长。任何人都可以提出替代方案吗?

编辑:我根据@Dasun 反馈将其更改为数组。见上文values。如果我测试这个值:

alert(values);

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

【问题讨论】:

  • 使用我们可以在源代码中轻松找到的简单查询字符串删除视频...希望对视频的当前用户/所有者进行检查...
  • @JohnJohnGa 当然是在服务器端。另外,这一切都在用户登录之后,并且视频名称被混淆了。

标签: jquery joomla


【解决方案1】:

如果您请求的是 php 代码中的 POST,您可能会寻找 $_POST['videonames'] 那么你应该将它们作为请求的数据参数传递。

也传递它 trought 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');
     } 
     });

【讨论】:

  • 就是这样!好吧,主要是……我把它作为一个数组传入。所以我删除了dataType: json。这里的关键是使用data: {videonames:values},然后我在php 端使用JRequest::getVar('videonames', 0, 'post', 'array'); 访问它。亲爱的,谢谢!
【解决方案2】:

如果我理解您下面的问题应该可以帮助您。

使用 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);

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

【讨论】:

  • 不确定我是否理解,即使存储在数组中,视频的名称是否仍然在 POST url 中?这就是我要避免的,它太长了。
  • 仍然缺少一些东西。我已经更新了我的帖子。也许我创建的数组不正确?
  • 我不会从 url 中删除“值”吗?我相信您是在建议我将数组更改为 JSON 格式?
  • 您不必在 URL 中使用它。是的,删除它。 AJAX 调用将为您传输所有数据
  • json 格式让我很困惑我举了一个简单的例子:var JSONObject= { "name":"John Johnson", "street":"Oslo West 555"}; 并将data:JSONObject 放入 ajax 调用中,但我仍然得到 json 解析错误。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 2012-10-28
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
相关资源
最近更新 更多