2010-12-31 2 views
2

저는 AJAX를 배우고 있으며 NETTUTS Codeigniter에서 스크립트를 빌려 왔습니다. AJAX 스크립트 자체는 내 양식에 맞게 완벽하게 작동하지만 컨트롤러 당 데이터베이스는 업데이트되지 않습니다. Firebug는이 게시물이 AJAX 스크립트에서 잘 진행되었다고 말합니다. 제 질문은 컨트롤러를 시작하지 못하는 이유와 위치는 어디입니까?AJAX가 Codeigniter 컨트롤러와 짝을 이루지 않습니다

form_open 스크립트

echo form_open('contacts/entry', $form); 

아약스 스크립트 (즉 잘 작동 내가 무엇을 보여주는하고 위의 확인 스크립트가)

var form_data = { 
    fname: $('#fname').val(), 
    lname: $('#lname').val(), 
    email: $('#email').val(), 
    phone: $('#phone').val(), 
    relate: $('#relate').val(), 
    ajax: '1' 
}; 

$.ajax({ 
    url: "<?php echo site_url('contacts/entry'); ?>", 
    type: 'POST', 
    data: 'form_data', 
    success: function() { 
     $('#status').text('Update successful!'); 
    } 
}); 

return false; 

}); 나는 "AJAX : 1"을 포함했다

참고 form_data
에 컨트롤러

function entry() 
{ 
    if ($this->input->post('ajax')) { 
    $data = array 
      (
      'fname' => $this->input->post('fname'), 
      'lname' => $this->input->post('lname'), 
      'email' => $this->input->post('email'), 
      'phone' => $this->input->post('phone'), 
      'relate' => $this->input->post('relate'), 
      ); 

    //removed validation set rules to shorten the question 

    if ($this->form_validation->run() == TRUE) 
    { 
    $this->db->insert('contacts', $data); 
    $this->index();  
    } else 
    { 
    $this->index(); 
    }  
} 
} 

는 "만약 ($ this-> 입력 -> 포스트 ('아약스'))"의 사용이다 컨트롤러를 시작하는 올바른 방법? jquery없이 폼 자체가 잘 작동하고 컨트롤러를 실행합니다. 그래서 저는 두 개의 개별 조각이 작동한다는 것을 알고 있습니다, 그들은 단지 메시가 아닙니다. 감사

답변

5

우선은 var form_data { ajax: '1' }를 삭제하고 같은 것을 사용합니다 :에

if($this->input->server('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest') 
{ 
    // This is AJAX 
} 
else { 
    // This is standard HTTP 
} 

좋은 방법을 MY_Controller를 사용하는 경우이를 처리하십시오. 당신이 그것을 사용하는 경우, 다음과 같은 기능을 추가

protected function is_ajax() { 
    return ($this->input->server('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest') ? TRUE : FALSE; 
} 

그리고 당신은 사용할 수 있습니다

if($this->is_ajax()) 
{ 
    // This is AJAX 
} 
else { 
    // This is HTTP 
} 

그런 다음 당신은 실제보기에 전달하고 작업을 처리하기 위해 결과 반향했습니다. 이처럼 :

if ($this->form_validation->run() == TRUE) 
{ 
    // Tip: you've to do the data management on MODELS 
    $action = $this->db->insert('contacts', $data); 

    // With this method you can handle AJAX and HTTP on the same 
    // validation. If is AJAX you print, if not you redirect. 
    if($this->is_ajax()) 
     echo $action; 
    else { 
     // if worked, redirect the user to the success 
     // else send it to the form error 
     if($action) 
      redirect("form_success"); 
     else 
      redirect("form_error"); 
    } 
else { 
    if($this->is_ajax()) 
     echo false; 
    else { 
     $this->load->view("error_form"); 
    } 
} 

그리고 당신이 작업을 처리하기 위해 당신에게 jQuery 코드를 수정했습니다 : 난 그냥 따옴표를 추가

$.ajax({ 
    url: "<?php echo site_url('contacts/entry'); ?>", 
    type: 'POST', 
    data: form_data, // Like said jondavidjohn 
    success: function(data) { 
     if(data) 
     { 
      $('#status').text('Update successful!'); 
     } else { 
      $('#status').text('Operation failed!'); 
     } 
    } 
}); 
+0

그래, 근본적으로 내가 제안한 건 + XMLHttpRequest를 확인했기 때문이다. – jondavidjohn

+0

을 검사하고 (data === true)가 중복되는지 확인하고, 기본적으로 참인지를 검사합니다. – jondavidjohn

+0

@ jondavidjohn : 고마워요! 나는 그것을 편집한다! :) 나는 같은 함수에서 아약스와 http도 처리 할 수있는 함수를 추가했다. – ipalaus

2

form_data 대신 'form_data' 문자열을 게시하면 form_data 주변의 따옴표를 제거하고 다시 시도하십시오.

$.ajax({ 
    url: "<?php echo site_url('contacts/entry'); ?>", 
    type: 'POST', 
    data: form_data, // <-- previously you had data: 'form_data', which would pass the string 'form_data', not the variable. 
    success: function() { 
     $('#status').text('Update successful!'); 
    } 
}); 

또한 DB 작업 결과를 표시 한 다음 반환 된 데이터를 사용하여 db 작업이 성공적으로 완료되었는지 테스트합니다.

PHP/CI

... 
echo $this->db->insert('contacts',$data); 
... 

jQuery를/AJAX는

모든
... 
success: function(data) { 
    if(data) { 
     //alert success 
    } 
    else { 
     //alert failure 
    } 
} 
+0

, 그것은 그들과 함께 또는 그 전에 일을 didnt가 있습니다. 이것은 개인 연락처 목록이며 양식 바로 아래에 데이터베이스 출력이 있습니다. jquery없이 삽입 잘 작동합니다. 또한 phpmyadmin에서 데이터베이스를 검토합니다. 하지만 당신이 제안한 것을 줄 것입니다. 나는 "업데이트 성공!" 표시 – Brad

+0

는 따옴표를 제거 했습니까? 정확히 어떻게 아약스 호출을 봐야 내 대답을 업데이 트됩니다. – jondavidjohn

+0

그래도 통화를 성공적으로 수행했다는 것을 알 수 있습니다. 단, 필자는 꼭 필요한대로 삽입 작업을 수행 할 컨트롤러를 시작하지 않습니다. – Brad

관련 문제