2016-08-16 9 views
0

.asmx 웹 메소드에서 일부 데이터를 다시 가져 오려고하지만 Ajax 호출에서 실패합니다. 1 개 매개 변수, 그룹 ID라는 이름의 정수를 취 GetUsersjquery ajax가 Backbone.js 모음에 대해 정의되지 않은 options.data로 인해 실패했습니다.

// BaseCompositeView is basically an object extended from Marionette.CompositeView 
    MyListView = App.Base.Objects.BaseCompositeView.extend({ 
     // contents removed for brevity 
    }); 

    // BaseModel is basically an object extended from Backbone.Model 
    MyListView.Model = App.Base.Objects.BaseModel.extend({ 
     // nothing here 
    }); 

    // BaseCollection is basically an object extended from Backbone.Collection 
    MyListView.Collection = App.Base.Objects.BaseCollection.extend({ 
     url: "../WebServices/MyService.asmx/GetUsers", 

     model: MyListView.Model, 

     initialize: function(options) { 
      this.options = _.extend({}, this.defaults, this.options); 

      this.options.data = JSON.stringify({ 
       "groupID": parseInt(App.Prop.get("GroupID"), 10) 
      }); 
     } 

    }); 

    var group_users_view = new MyListView({ 
     tagname: "div", 
     model: new MyListView.Model(), 
     collection: new MyListView.Collection() 
    }); 

내 웹 방법 : 여기 내 JS 코드의 일부이다. 이 페이지에 따르면 http://backbonejs.org/#Collection-constructor에 따르면 MyListView.Collection 내의 초기화 메서드는 MyListView가 인스턴스화 될 때 발생하는 Collection이 만들어 질 때 호출됩니다.

오류는 다음 줄의 파일 JQuery와 - 1.12.3.js 내부에서 발생 : 여기

xhr.send((options.hasContent && options.data) || null); 

이 options.data이 undefined입니다. 그러나 옵션의 url 속성은 정확합니다. 그렇다면 jquery 아약스가 전달하는 데이터를 인식하지 못하는 이유는 무엇입니까?

답변

1

기본적으로 서버에 대한 Ajax 호출로 전달되는 this.optionsoptions 개체 간에는 아무런 관계가 없습니다.

fetch 또는 sync의 소스 코드를 읽으면 this.options을 참조하여 해당 options 개체를 만들지 않는다는 것을 알 수 있습니다.

데이터를 읽고 쓰기 위해 설정해야하는 경우 sync을 무시할 수 있습니다.

sync: function sync(method, collection, options) { 
    // It is okay for options to be undefined in the _.extend call. 
    options = _.extend({}, options, this.options); 
    return MyListView.Collection.__super__.sync.call(this, method, collection, options); 
}, 
+0

감사 루이 : 당신이 jQuery.ajax에 전달되는의 일부가 될 this.options 모두를 원한다면, 당신은 같은 것을 가질 수있다! 당신은 절대적으로 옳습니다. 내 컬렉션에 동기화 메소드를 추가해야했습니다. 이것은 퍼즐의 누락 된 부분이었습니다. 기본적으로, 여기에서는 메소드가 "read"인지 검사하고, 그렇다면 결국 $ .ajax()를 호출하는 커스텀 메소드를 호출합니다. 이 커스텀 메소드 호출은 내 컬렉션의 initialize 메소드에서 초기화 된'collection.options.data'에서 전달할 곳입니다. – SpartaSixZero