jquery ajax函数返回html代码

问题描述 投票:-3回答:2

我使用带有CodeIginter的jquery库,但返回的数据是视图的html代码。

它应该返回控制器中方法的输出。这是我的ajax代码:

$("#btn-delete").click(function() {
  $.ajax({
    type: "POST",
    url: "edit_questions/delete_question",
    data: {
      'q_id': 12
    },
    dataType: "text",
    cache: false,
    success: function(data) {
      alert(data);
    }
  });
});

这是我的控制器

<?PHP 
 class edit_questions extends CI_controller{
    var $feed=array();
    public function __construct(){
    parent::__construct();

    $this->load->model("Admin_db_model");
    $this->feed['status']=-1;
    $this->feed['msg']='';
   }
public function index(){



    $this->load->view("edit_questions_view",$this->feed);
}

public function show_questions(){

    $this->feed['q_list']=$this->Admin_db_model->get_question_titles($this-
    >uri->segment(3));

    $this->load->view('edit_questions_view',$this->feed);

}


public function delete_question(){


    echo"تم الحذف ".$this->input->post('q_id')  ;
    }   


}

这是我在警报功能enter image description here中获得的截图

php jquery codeigniter
2个回答
1
投票

试试这个dataType:“html”而不是dataType:“text”


0
投票

根据您已经尝试过的内容,调试它的一些好的第一步是:

  • 确保函数delete_question()通过将die("X marks the spot")之类的东西放入其正文中运行,然后在警报消息中搜索它。
  • 检查浏览器的开发人员工具(右键单击,检查 元素)并转到网络选项卡,刷新该页面,您的AJAX 请求应该出现在那里。有错误吗?

看起来您的Web服务器正在使用HTML进行响应,您只需要一个字符串。标准Web服务器不会这样做,除非页面返回错误,即404错误确实带有HTML模板,具体取决于您的配置。由于文本在警报框中被切断,我无法确认情况并非如此。

如果它不是一般错误,在堆栈中的某个位置,您必须在<?php ?>标记之外或echo语句内输出HTML。

如果您希望进一步调试,我建议您尝试在堆栈中第一个PHP脚本的第一行初始化输出缓冲区。 ob_start(),后来$ html = ob_get_contents()ob_clean()

这将捕获PHP向客户端输出HTML的所有尝试,并暂时将它们挂起在缓冲区中。有了这个,您可以更容易地找到脚本输出内容的位置。我发现使用输出缓冲区来获得对客户端接收的数据的更多控制是一种好习惯

由于您使用的是PHP框架,因此某些URL映射可能无法控制,因此,您可以使用var_dump(debug_backtrace())来查找脚本的起始位置。

© www.soinside.com 2019 - 2024. All rights reserved.