Codeigniter,Ajax:将html字符串从视图传递给控制器

时间:2015-09-19 08:23:37

标签: php jquery ajax codeigniter

我正在尝试使用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

我做错了什么?

1 个答案:

答案 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输出。