将html作为ajax响应返回

时间:2015-11-14 05:09:54

标签: javascript php jquery ajax codeigniter

我有通过AJAX在codeigniter中提交表单的网页,提交效果很好,并且php脚本也可以工作,但是当php完成后它会返回一个HTML视图作为对Ajax的响应,所以它重新填充了div而是重新填充它尝试下载文件。 Chrome控制台显示

Resource interpreted as Document but transferred with MIME type application/text/HTML

让我感到困惑,因为我在另一个页面中使用相同的代码并且工作正常。

这是我的Jquery脚本

$("#addpaymentform").submit(function (event) {
    var formdata = $(this).serialize();
    $.ajax({
        type: "POST",
        data: formdata,
        url: baseurl + 'sales/add_payment',
        success: function (data, status, xhr) {
            var ct = xhr.getResponseHeader("content-type") || "";
            if (ct.indexOf('html') > -1) {
                $('#paymets').html();
                $('#payments').html(data);
                 $('#addpaymentform').each(function() { this.reset() });
            }
            if (ct.indexOf('json') > -1) {
                $("#Mynavbar").notify(
                        data,
                        {position: "bottom center"}
                );
         $('#addpaymentform').each(function() { this.reset() });
            }
        }

    });
    event.preventDefault(); // this will prevent from submitting the form.
});

这是我的控制器

function add_payment()
    {

        $this->form_validation->set_rules('fpay', 'Type of payment', 'trim|required|alpha');
        $this->form_validation->set_rules('payment', 'Payment', 'trim|numeric');
        $this->form_validation->set_error_delimiters('', '');

        if ($this->form_validation->run() == FALSE) { // validation hasn't been passed
            header('Content-type: application/json');
            echo json_encode(validation_errors());
        } else {
            $fpay = filter_var($this->input->post('fpay'), FILTER_SANITIZE_STRING);
            $payment = filter_var($this->input->post('payment'), FILTER_SANITIZE_STRING);
            if(isset($_SESSION['payments'][$fpay]))
            {
                $temp = $_SESSION['payments'][$fpay] + $payment;
                $_SESSION['payments'][$fpay] = $temp;
                header('Content-type: application/html');
                 echo $this->_loadpaymentcontent();
            }
        }

    }

function _loadpaymentcontent() {
        $this->load->view('payment_content');
    }

希望有人能指出我正确的方向,我已经坚持了2天。

谢谢大家。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我通过在控制器方法中返回到ajax调用的值之后放置一个 exit; 来成功解决了这个问题。

在您的情况下,它将是:

echo $this->_loadpaymentcontent();
exit;

这里的退出是什么,它将返回值限制为应返回到ajax调用的值,并在将html附加到返回值之前退出。

根据它产生的效果,这是显而易见的。

答案 1 :(得分:0)

你需要设置你的AJAX。

$.ajax({
  type : 'POST',
  url : baseurl + 'sales/add_payment',
  dataType : 'html', // Will set the return type of the response as AJAX.

  ... Keep rest of the code same.