2015-11-14 86 views
1

我有一個通過AJAX在codeigniter中提交表單的網頁,提交工作很好,php腳本也可以工作,但是當php完成時,它會返回一個HTML視圖作爲對Ajax的響應,因此它重新填充div,而不是重新填充它嘗試下載文件。 Chrome控制檯顯示返回html作爲ajax響應

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天的正確方向。

謝謝大家。

+1

這個陌生的mime類型'application/text/HTML'來自哪裏? HTML將是'text/html' – Andreas

+0

在'_loadpaymentcontent()'方法的'payment_content'視圖之後放置第二個參數'true'。 – Tpojka

回答

1

我有同樣的問題,我通過把一個出口成功地解決了它;在控制器方法中返回到ajax調用的值之後的

你的情況,這將是:

echo $this->_loadpaymentcontent(); 
exit; 

做什麼退出這裏是它限制了返回值應該返回到Ajax調用和退出HTML之前被附加到返回的值值。

這是每個它產生的效果是明顯的。

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. 
+0

'dataType'不應該被顯式設置。給定一個適當的'Content-Type',jQuery就可以推斷出它。 –