我正在尝试使用ajax调用将一个长Html字符串从一个视图传递给一个控制器,所以我可以将它进一步传递给另一个视图。
标记:
<a id="openPDF">Save as PDF</a>
JS:
$('#openPDF').click(function(){
var htmlText = $( "div.modal" ).html(); //grab the html
var dataToSend = JSON.stringify("{strData : '" + htmlText + "' }");
console.log(dataToSend ); // contains the json
$.ajax({
url: "/dashboard/pdf",
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: dataToSend
success: function (msg) { alert(msg.d); },
error: function (type) { alert("ERROR!" + type.responseText); }
});
});
控制器:
public function pdf(){
$data['htmlString'] = json_decode($this->input->post('strData'));
$this->load->view('pdf', $data);
}
我的ajax调用不起作用,因为当点击#openPDF
按钮时我收到警告错误:
ERROR! NULL
我做错了什么?
答案 0 :(得分:0)
在编写输出之前,您是否正确设置了标题?
控制器:
public function pdf() {
$data['htmlString'] = json_decode($this->input->post('strData'));
$viewString = $this->load->view('pdf', $data, true); // this returns view as string rather than outputting it
header('Content-Type: application/json');
echo json_encode(['viewString' => $viewString]);
}
在客户端js中,您可以将此success
函数传递给$.ajax()
success: function (response) {
if ('undefined' !== typeof response.viewString) {
// append view to concerned element
$('#viewTarget').append(response.viewString);
} else {
console.log('response did not contain viewString');
}
},
我希望这会有所帮助。
同时强>
直接导航到浏览器中的url(发送ajax请求的url),看看你是否获得了有效的json输出。