【问题标题】:$.get data from view Codeigniter$.get data from view Codeigniter
【发布时间】:2012-02-09 03:19:02
【问题描述】:

我的 js 脚本

jQuery(".unblock").click(function(){
        var num = jQuery('.page.active').text();
        var ban_id = jQuery(this).attr('id');

        jQuery.get("http://127.0.0.1/auth_system_1/user_activity/delete_user_ban", { ban_id : ban_id, num : num }, function(data) {

                jQuery("#ban_list").append(data);

        }, "json");

    });

我的 delete_user_ban 函数

function delete_user_ban()
{
    $user_id = $this->session->userdata('user_id');

    $ban_id = $this->input->post('ban_id');

    $current_page = (int)$this->input->post('num');

    //$this->activity_model->delete_user_ban($ban_id);

    $per_page = 2;

    $data['ban_list'] = $this->user_activity_lib->user_ban_list($user_id, $current_page, $per_page);

    $this->load->view('front_end/ajax_delete_ban', $data);

} 

我想在这里退货

<!--begin ban list-->
<div id="ban_list">
            <?php foreach($ban_list as $value): ?>
      <div class="comment-box small-comment" id="info-ban-1">
          <div class="photo-box">
       <img src="<?=$value['user_image'];?>" alt="" class="photo rounded"/>
       <a href="#" title="" class="corner rounded"></a>
          </div>
          <div class="comment rounded">
       <div class="bg-tl"></div>
       <div class="avatars">
           <a href="#" title=""><?=$value['user'];?></a><span>blocked</span><a href="<?=base_url() . $value['ban_user'];?>" title=""><img src="<?=$value['user_ban_image'];?>" alt=""/><?=$value['ban_user'];?></a>
           <a href="[removed];" title="Unblock" class="unblock" id="<?=$value['ban_id'];?>">unblock</a>
       </div>
          </div>
          <div class="both"></div>
      </div>
            <?php endforeach; ?>

            </div>
      <!--end ban list-->
      <?=$pagination;?>
         </div> 

我能说什么,除了没有返回数据之外,一切都很好。

如果我在函数中删除这一行:

$this->load->view(‘front_end/ajax_delete_ban’, $data);

并添加 echo ‘1’;

它返回我想要'1'的位置,但从这里获取内容 $this->load->view('front_end/ajax_delete_ban', $data);不返回这个 div 吗?为什么?

我看过响应和 html 什么返回,这里是从视图返回的 html 行(没有错误)但没有出现在 JQuery(”#ban_list”).append(data);

我的 .get 效果很好,但只返回一个单词,还在 firebug 中查看响应和 html,它显示返回的行但不将其添加到 div?

我做了一些测试:

echo '1111';

返回OK!

echo '1111 2222';

不返回?

如何返回超过一个词,我的错误在哪里?

【问题讨论】:

  • 如果您尝试加载html,为什么要将.get 中的返回设置为json

标签: php codeigniter jquery


【解决方案1】:

你是在混用 get 和 post,不是吗?

要么将你的 jQuery 更改为 $.post()

或将您的 PHP 更改为 $this-&gt;input-&gt;get();

您还在 $.get() 调用中使用了“json”,但返回的是 HTML。

你应该对你的视图进行 json_encode。

您可以将第三个布尔参数传递给$this-&gt;load-&gt;view(),它将视图中的 HTML 返回为字符串。

$myHTML = $this->load->view('front_end/ajax_delete_ban', $data, true);
echo json_encode(array("html" => $myHTML));

然后,在您的 jQuery 回调函数中,您可以使用 data.html 检索 html

【讨论】:

  • 我认为将 HTML 字符串放入 JSON 格式不是一个好主意。我的意思是,为什么不直接告诉 jQuery 我们希望返回 HTML?
  • 你能详细说明一下危害吗?将附加数据返回给 javascript 非常方便。例如,我经常 json_encode 并返回 array('success' =&gt; true)array('success' =&gt; false) 以及 html。这样,我可以检查 response.success 并采取正确的行动。提醒我危险,我真的很感兴趣,因为我一直这样做。
  • 这没什么大不了的。但是,我认为您应该根据从服务器收到的响应(无论是成功还是错误)通过 JavaScript 生成 HTML,然后将 HTML 注入到文档中。这样做的目的是减少客户端和服务器之间传输的数据量。 AFAIK,没有伤害。这只是性能问题。
  • 有时您别无选择,只能提供一种分离方式。 JSON 编码可以为您做到这一点,但直接的 HTML 不能(可靠或容易地)。例如,如果您进行 AJAX 调用并且成功后您想将两个完全不同的 div 附加到文档的两个完全不同的部分怎么办?使用 response.div1HTML 和 response.div2HTML 比解析单个 HTML 响应要容易得多。这就是我的意思。我使用了两个 HTML div 的示例,但是,您通常希望一起处理额外的数据以及实际的 html“通知”本身。
【解决方案2】:

试试这个:

jQuery("#ban_list").append($('<div></div>').html(data));

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多