2011-08-10 2 views
4

Philip Sturgeon이 작성한 RESTful API를 사용하여 Backbone.js의 모델을 Codeigniter에 동기화하려고합니다. 사용자 자원 그룹에 항목을 추가하려고합니다. . 문제는 : 새로운 항목을 얻지 만 제목은 "Hello World !!!"대신 0이됩니다. 컨트롤러가 'title'=> $ this-> post ('title')에 있다고 생각합니다. 'title'=> 'FOO'로 바꾸면 Foo가 DB에 표시되기 때문입니다. 이견있는 사람? , BTW 내가 Backbone.jsBackbone.js에서 CodeIgniter로 DB로 HTTP 요청 전달

backbone.js

url: "MyApp/index.php/app/user" or 
url: "MyApp/index.php/app/user/id/(xxx)" 

의 URL로두고해야

$(document).ready(function(){ 
var Item = Backbone.Model.extend({ 

defaults: { 
    title: "Hello World!!!" 
}, 

url: "MyApp/index.php/app/user" 

}); 
var item=new Item; 
item.save(); 

app.php (컨트롤러)

function user_post() 
{ 
    $data=array(
    'id'=> NULL, 
    'title'=>$this->post('title') 
    ); 

    $result = $this->App_Model->create($data); 
} 

app_model.php (모델)

function create($data) 
{ 

    $query = $this->db->insert('data', $data) 
} 

업데이트 :

이는 크롬 경위

요청 방법에서입니다 : POST

상태 코드 : 200 OK

요청 Headersview 소스

수락 : 응용 프로그램/JSON, 텍스트/자바 스크립트, /; Q = 0.01

연결 : 연결 유지

콘텐츠 길이 : 15

콘텐츠 형식 : 응용 프로그램/JSON

X-요청-으로 : XMLHttpRequest를

요청 페이로드를 { "title": "내 콘텐츠 !!"}

+0

요청 방법 : POST 상태 코드 : 200 OK Headersview 소스 요청 수락 : application/json, text/javascript, */*; q = 0.01 Accept-Charset : ISO-8859-1, utf-8, q = 0.7, *; q = 0.3 Accept-Encoding : gzip, deflate, sdch 수락 언어 : ko - 0.8 연결 : 연결 유지 콘텐츠 길이를 15 내용 - 형식 : 응용 프로그램/JSON 호스트 : www.williamsham.com X-요청-으로 : XMLHttpRequest를 요청 페이로드 { "제목을": "내 콘텐츠 !! "} –

답변

1

제목 매개 변수가 gett가 아닌 이유는 확실하지 않습니다. ing 통과. Firebug 또는 Chrome Inspector를 사용하여 제목 매개 변수가 실제로 전송되었는지 확인하는 것이 좋습니다. 거기에서 디버깅 범위를 좁힐 수 있습니다. URL을, 그것은 하나의 사용자를 관리 할 수 ​​MyApp를/index.php를/응용 프로그램/사용자/ID "를 사용하는 것입니다 할 수있는 편안하고 방법에 관해서는

그것은처럼 보이는 편집 귀하의 요청을 잘 보냈습니다. 게시물 데이터를 검사 할 것입니다. 왜 게시물 데이터를 인쇄하고 무엇을받을 볼 수 있습니다. 내 생각에 PHP는 JSON 데이터를 올바르게 읽지 않습니다. $ decoded = json_decode ($ this-> post ('title'))을 PHP 객체로 바꾼다.

+0

Chrome Inspector에서 추가 한 내용 ... 오류의 원인은 어디입니까? –

+0

새 정보 반영을 위해 편집 – userinev

5

내 솔루션 :

$data = json_decode(file_get_contents('php://input'), true); 
$this->site_model->create($data); 
0

$this->input->post('title');을 사용하면 어떨까요?(Reference) 당신은 당신의 컨트롤러에서이 라인을 변경해야

2

:

$this->post('title') 

$this->input->post('title') 

사람 또는 실제로 당신이 $ _POST [처럼 POST 글로벌 변수를 액세스하기위한 일반 PHP를 사용할 수 있습니다 '표제'].

참고로,

$this->request->body 

그것은 당신이 Backbone.js를 통해 게시하는 모든 값의 내용을 포함해야 액세스하는 CodeIgniter's Input Class