我使用带有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') ;
}
}
答案 0 :(得分:1)
试试这个 dataType:&#34; html&#34; 而不是dataType:&#34; text&#34;
答案 1 :(得分:0)
根据您已经尝试过的内容,调试它的一些好的第一步是:
确保通过put运行delete_question()函数
像die("X marks the spot")
之类的东西进入它的身体,然后
在警报信息中搜索它。
检查浏览器的开发者工具(右键单击,检查
元素)并转到网络选项卡,刷新该页面,您的AJAX
请求应该出现在那里。有错误吗?
您的网络服务器似乎正在使用HTML进行响应,您只需要一个字符串。标准Web服务器不会这样做,除非页面返回错误,即404错误确实带有HTML模板,具体取决于您的配置。由于文本在警报框中被截断,我无法确认情况并非如此。
如果不是一般错误,则堆栈中的某个位置必须输出<?php ?>
标记之外或echo
语句内的HTML。
如果您希望进一步调试此内容,我建议您尝试在堆栈中第一个PHP脚本的第一行初始化输出缓冲区。 ob_start(),稍后$ html = ob_get_contents()和ob_clean()。
这将捕获PHP向客户端输出HTML的所有尝试,并暂时将它们挂起在缓冲区中。有了这个,您可以更容易地找到脚本输出内容的位置。我发现使用输出缓冲区来获得对客户端接收的数据的更多控制的好习惯
由于您使用的是PHP框架,因此某些URL映射可能无法控制,因此,您可以使用var_dump(debug_backtrace())
找出脚本的起始位置。