0

背景: ajax を介して外部の php ファイルからページ コンテンツに挿入しています。
制約: JavaScript でカスタム オブジェクトを「適切に」作成する方法で説明されているオブジェクト構造に従いたいですか? .
問題:しかし、この構造では、成功のコールバックで応答データを受け取りません。firebug では、投稿によって返された正しいhtml を確認できます。

問題のあるコード:

// Abstract class for functionality of both QuizView and QuizAdmin
Quiz = Object.makeSubclass();
Quiz.prototype._init= function() {};
Quiz.prototype.fetchSuccess= function(data) {
    // fetchSuccess must be defined before fetch.
    console.log("Quiz.prototype.fetchSucces"); // This gets printed out - so the function is called.
    console.log(this.targetElement); // echoes the correct element - when I hoover it, I see it in the page.
    console.log(data); // echoes undefined
    this.targetElement.append(data); // Obviously this line is what I want to do.
};
//This function gets content specified by url.
Quiz.prototype.fetch= function(what,where) {
    console.log("Quiz.prototype.fetch");
    this.targetElement=where;
    console.log(this.targetElement);
    // Get the the content
    $.ajax({
          type: "POST",
          url: what,
          success: this.fetchSuccess,
          targetElement: this.targetElement,
          dataType: "html",
          async: false
    });
}; // End Quiz.prototype.fetch

注:基本的に、以下の関連する質問と私のコードの唯一の違いは、私が使用function expressionし、使用していないことfunction declarationです。これは、 constraintで説明されている構造に従いたいためです。

関連する質問:

Jquery ajax 外部コールバック関数
JavaScript: var functionName = function() {} vs function functionName() {}
$.ajax( への呼び出しで定義したくない場合、jQuery $.ajax() 成功関数を定義する場所)?
jQuery ajax 成功コールバック関数の定義

シンプルなコード構成 (これでうまくいきます!)

function fetchSuccess(data){
  $(".content-bottom").append(data);
}

  $(document).ready(function(){
  // Get the view content
    $.ajax({
      type: "POST",
      url: "../../../../includes/quiz1/index.php",
      success: fetchSuccess,
      dataType: "html", 
      async: false
    });
  });
4

1 に答える 1

1

これを試して

関数参照を渡していますが、this内部 fetchSuccessは期待したものではありません

// Abstract class for functionality of both QuizView and QuizAdmin
Quiz = Object.makeSubclass();
Quiz.prototype._init= function() {};
Quiz.prototype.fetchSuccess= function(data) {
    // fetchSuccess must be defined before fetch.
    console.log("Quiz.prototype.fetchSucces"); // This gets printed out - so the function is called.
    console.log(this.targetElement); // echoes the correct element - when I hoover it, I see it in the page.
    console.log(data); // echoes undefined
    this.targetElement.append(data); // Obviously this line is what I want to do.
};
//This function gets content specified by url.
Quiz.prototype.fetch= function(what,where) {
    console.log("Quiz.prototype.fetch");
    this.targetElement=where;
    console.log(this.targetElement);
    // Get the the content
    var self = this;
    $.ajax({
          type: "POST",
          url: what,
          success: function(){self.fetchSuccess.apply(self, arguments)}, 
          targetElement: this.targetElement,
          dataType: "html",
          async: false
    });
};
于 2013-05-18T00:12:45.873 に答える