2014-12-27 52 views
0

拋出錯誤,我有以下AjaxAJAX發送對象的功能

$.ajax({ 
     type: 'POST', 
     url: '/Jeopardy/saveCategoryData', 
     dataType: 'json', 
     data: { 
      name: this.name, 
      questions: this.question_array, 
      sort_number: this.sort_number, 
      game_id: game_id 
     }, 
     success: function (data) 
     { 
      this.id = data; 
     } 
    }); 

更新這是全類Ajax是分開的:

function Category(name, sort_number) 
{ 
    this.name = name; 
    this.sort_number = sort_number; 
    this.question_array = []; 
    this.id = 0; 
    /* 
     Functions 
    */ 
} 

Category.prototype.saveCategory = function() 
{ 
    $.ajax({ 
     type: 'POST', 
     url: '/Jeopardy/createCategory', 
     dataType: 'json', 
     data: { 
      request: 'ajax', 
      name: this.name, 
      sort_number: this.sort_number, 
      game_id: game_id 
     }, 
     success: function (data) 
     { 
      this.id = data; 
     } 
    }); 
    $('.category_'+this.sort_number).each(function() 
    { 
     $(this).css('opacity', '1'); 
     $(this).addClass('question'); 
    }) 
} 

Category.prototype.submitCategory = function() 
{ 

     $.ajax({ 
      type: 'POST', 
      url: '/Jeopardy/saveCategoryData', 
      dataType: 'json', 
      data: { 
       request: 'ajax', 
       name: this.name, 
       questions: this.question_array, 
       sort_number: this.sort_number, 
       game_id: game_id 
      }, 
      success: function (data) 
      { 
       this.id = data; 
      } 
     }); 
} 

Category.prototype.addQuestion = function(question,index) 
{ 
    this.question_array[index] = question 
} 

凡this.question_array是一組數字question對象:

function Question(question, score) 
{ 
    this.question = question; 
    this.score = score; 
    this.answer = []; 

} 

Question.prototype.getScore = function() 
{ 
    return this.score; 
} 

Question.prototype.addAnswer = function(answer) 
{ 
    this.answer.push(answer) 
} 

我的回答對象:

function Answer(answer, is_correct) 
{ 
    this.answer = answer; 
    this.is_correct = is_correct; 
} 

當我Ajax的提交我在函數addAnswer得到一個錯誤說:Cannot read property 'push' of undefined

誰能告訴我,爲什麼這可能發生(我是相當新的JavaScript來OOP )

更新create.js(腳本控制的對象)

保存闕Stion的功能:

function saveQuestion() { 
    var question = new Question($('#txt_question').val(), current_money); 
    var array_index = (current_money/100) - 1; 
    $('.txt_answer').each(function() 
    { 
     var answer = new Answer($(this).val(), $(this).prev().find('input').is(':checked')); 
     question.addAnswer(answer); // <-- Add answer 
    }) 
    if(current_element.find('.badge').length == 0) 
    { 
     current_element.prepend('<span class="badge badge-sm up bg-success m-l-n-sm count pull-right" style="top: 0.5px;"><i class="fa fa-check"></i></span>'); 
    } 
    addQuestionToCategory(question, array_index); 
    questionObject.fadeOutAnimation(); 

} 

function addQuestionToCategory(question, index) { 
switch (current_category_id) { 
    case "1": 
     category_1.addQuestion(question, index); 
     break; 
    case "2": 
     category_2.addQuestion(question, index); 
     break; 
    case "3": 
     category_3.addQuestion(question, index); 
     break; 
    case "4": 
     category_4.addQuestion(question, index); 
     break; 
} 

}

以及調用每個類別對象Ajax的功能:

function saveGame() 
{ 
    category_1.submitCategory(); 
    category_2.submitCategory(); 
    category_3.submitCategory(); 
    category_4.submitCategory(); 
} 

調試調用堆棧:

Question.addAnswer (question.js:25) 
n.param.e (jquery-1.11.0.min.js:4) 
Wc (jquery-1.11.0.min.js:4) 
Wc (jquery-1.11.0.min.js:4) 
(anonymous function) (jquery-1.11.0.min.js:4) 
n.extend.each (jquery-1.11.0.min.js:2) 
Wc (jquery-1.11.0.min.js:4) 
n.param (jquery-1.11.0.min.js:4) 
n.extend.ajax (jquery-1.11.0.min.js:4) 
Category.submitCategory (category.js:47) 
saveGame (create.js:116) 
onclick (create?game_id=1:182) 

* UPDATE

好了一些奇怪的事情,如果我改變addAnswer功能如下:

Question.prototype.addAnswer = function(answer) 
{ 
    if(this.answers != undefined) 
    { 
     this.answers.push(answer) 
    } 
} 

它工作正常?

回答

1

看起來像亞歷山大刪除他的回答,這裏是我的建議:

function Question(question, score) 
{ 
    this.question = question; 
    this.score = score; 
    this.answer = []; 
} 

Question.prototype.getScore = function() 
{ 
    return this.score; 
} 

Question.prototype.submitQuestion = function() 
{ 

} 

Question.prototype.addAnswer = function(answer) 
{ 
    this.answer.push(answer) 
} 
+0

伊夫更新它,所以它看起來是這樣,但我仍然得到錯誤 – 2014-12-27 16:34:50

+0

你能告訴的代碼行實際上增加問題和答案?這就是問題所在,我不認爲這與Ajax或jQuery有關。 – 2014-12-27 16:36:32

+0

將其添加到我的代碼 – 2014-12-27 16:40:22