2014-06-19 1 views
1

를 보냅니다. 문제는 게시 요청이 항상 취소된다는 것입니다. 보낸 데이터는 requestpayload 형식입니다.백본이 같은 백본 모음의 생성 방법을 사용하여 서버에 일부 데이터를 게시하려고 요청 페이로드 대신 FormData

일부 REST 클라이언트를 사용하여 requestPayload 대신 formData를 사용하여 데이터를 보내기 때문에 쉽게 게시 할 수 있습니다.

수취인?

편집

이 내가 네트워크 콘솔에서 무엇을 얻을 수 있습니다 : 나를 위해 일한 어떤이는 몇 가지 이유를 들어

Request URL:http://myendpointurlhere.com/ 
Request Headers CAUTION: Provisional headers are shown. 
Accept:application/json, text/javascript, */*; q=0.01 
Cache-Control:no-cache 
Content-Type:application/x-www-form-urlencoded 
Origin:http://localhost:8888 
Pragma:no-cache 
Referer:http://localhost:8888/case/12345 
User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 
Form Dataview sourceview URL encoded 
model:{"startDate":"19/5/2014","acute":"true","terminal":"true","comment":"","name":"Hypothyroidism","caseId":"4872585904914432"} 

편집 2

. 날이 당신의 생각을 알려 :

this.collection.create({}, 
{ 
    data:modelData, 
    wait:true, 
    emulateJSON:true 
}); 

답변

1

을 당신이 당신의 요청에 당신이 emulateJSON:true 옵션을 사용한다 formData로 전송 요청을해야하는 경우. From the docs:

당신이 Backbone.emulateJSON = true를 설정 응용 프로그램/JSON으로 인코딩 된 요청을 처리 할 수있는 기존의 웹 서버로 작업하는 경우; JSON이 모델 매개 변수로 직렬화되고 application/x-www-form-urlencoded MIME 유형으로 요청이 작성됩니다 (HTML 양식에서와 같이).

this.collection.create(modelData, 
{ 
    wait:true, 
    emulateJSON:true 
}); 

또는 모든 요청 emulateJSON를 사용해야 할 경우 당신은 함께 세계적으로 설정할 수 있습니다 Backbone.emulateJSON=true;

업데이트 :

당신이 실제로 서버에 FormData 객체를 전송해야하는 경우 것 서버에 보내기 전에 모델/컬렉션의 동기화를 수정하여 직접 생성해야합니다.

var YourModel = Backbone.Model.extend({ 
    sync: function(method, model, options){ 
     options = options || {}; 
     var formData = new FormData(); 

     var json = model.toJSON(); 
     _.each(json, function(value, key){ 
      formData.append(key, value); 
     });  

     options.data = formData; 
     options.emulateJSON = true; // Important because your sending formdata 
     return Backbone.Model.prototype.sync.call(this, method, model, options);   
    } 
}); 

http://mrjoelkemp.com/2013/09/backbone-js-model-save-without-the-emulatejson-model-attribute/이 작동하는 방법의 좋은 예를 제공한다 : 여기에 (안 테스트) 당신이 시도 할 수있는 일입니다.

+0

이미 시도해 봤습니다. 편집을 참조하십시오. 이것은 내가 얻은 것입니다 – beNerd

+0

내 두 번째를 보시고 편집을 제공하고 리뷰를 제공해주십시오. – beNerd

0

그래 수동으로 자신의 FormData 저장소를 만들고 Request payloadFormData 아니라 당신에게 데이터를 전송하는 $.ajax를 원하는 경우 data로 보낼 수 있습니다.

당신이 그것을 할 수 있습니다

var formData = new FormData(); 

for (key in modelData) { 
    data.append(key, modelData[key]); 
} 

this.collection.create(modelData, { 
    wait:true, 
    data: formData, 
    processData: false 
}); 

당신은 JsBin demo here 그냥 개발자 도구를 열고 당신이 요청의 FormData에 필요한 것으로 확인 확인할 수 있습니다.

+0

내 두 번째보기 편집하고 리뷰를 제공해주세요. – beNerd

관련 문제