2011-06-22 12 views
1

私は、いくつかの異なるAjaxハンドラにすべてを代行する代わりに、すべてのAjax呼び出しを処理するJavaScriptオブジェクトを作成しようとしています。jQuery AJAX HAndlingの問題

だからここに私のAJAXハンドラ内で呼び出さしようとしている

私のPHPファイルが内のディレクトリは、例えばページに関連する名前が付けられ、AJAXというディレクトリに置かれ、これまで私が持っているものですジョブページには独自のディレクトリがあります。これらのディレクトリの中で私は関連するPHPファイルを配置しました。私のAJAX Handlerオブジェクトコードになりましたので、

:ので、このファイルと呼ばれ、正常に動作して、離れてperformAjaxCallがAJAX呼び出されたときから完璧に動作しますが、データが返されるが、私は未定義と見られている

function ajaxHandler(pageName,functionCall){ 
this.pageName  = pageName; 
this.functionCall = functionCall; 

// set functions 
this.getPage = getPage; 
this.setPage = setPage; 
this.getFunctionCall = getFunctionCall; 
this.setFunctionCall = setFunctionCall; 
this.performAjaxCall = performAjaxCall; 
} 
// accessor for current page 
function getPage(){ 
    return this.pageName; 
} 

// accessor for setting the current page 
function setPage(page){ 
    this.pageName = page; 
} 

// accessor for retrieving the current functionCall 
function getFunctionCall(){ 
    return this.functionCall; 
} 

// accessor for setting the current function call 
function setFunctionCall(func){ 
    this.functionCall = func; 
} 

// perform the loaded ajax call 
// DATA : must be in the form of JSON 
function performAjaxCall(data){ 
    $.ajax({ 
     type  : 'POST', 
     url  : '/ajax/'+ this.pageName + '/' + this.functionCall + '.php', 
     dataType : 'json', 
     data  : data, 
     success : function(data){ 
      return data; 
     }, 
     error : function(xhr, ajaxOptions, thrownError){ 
      return {"error":true,"msg":thrownError}; 
     } 
    }) 
} 

あなた

function getActiveJobs(initPage){ 
    var ajh = new ajaxHandler('jobs','getActiveJobs'); 
    var req = {'page' : 1}; 
    var data = ajh.performAjaxCall(req); 
    alert(data.error); 
} 

警告戻り、未定義の例を示しますが、私にはJavaScriptを有効にし、データが返されるのを待っていないと、このようなデータとしてはまだ定義されていないので、それは疑うが、私は私が思っわかりませんよ自分自身を導く前にここに尋ねるブラインド路地。

+1

を成功またはエラー。 – Sriram

答えて

2

JavaScriptは待機していません。 performAjaxCallは、要求の応答を受信する前に戻ります。でも、それは待っていた。しかし、あなたはこのようなコールバックからの値を返すことはできません。

success : function(data){ 
     return data; 
}, 

あなたは$.ajaxにこの関数を渡しているので、それが唯一の$.ajax関数内のNE値を返します。外側のperformAjaxCall機能には何の影響もありません。

あなたは、データを処理する別の関数を渡すようなものがあります:Ajaxの呼び出しは非同期であるとして、あなたが実行するコールバック関数を指定する必要があります

function performAjaxCall(data, cb){ 
    $.ajax({ 
     //... 
     success: cb, 
     error: cb 
    }); 
} 

function getActiveJobs(initPage){ 
    var ajh = new ajaxHandler('jobs','getActiveJobs'); 
    var req = {'page' : 1}; 
    ajh.performAjaxCall(req, function(data) { 
     alert(data.error); 
    }); 
} 
+0

ありがとうthats答えが必要私はあなたにマークしていると私はあなたの答えを受け入れるようにしようとしているようだが明らかに別の5分を待たなければならないように:)おかげでもう一度 – Deviland

+0

@デビランド:あなたは歓迎:) –