2011-01-26 10 views
1

質問が不明な場合はjquery noobieですので謝ります。私は様々な投稿からコールバックの周りに頭を抱えようとしていましたが、それがどのように一緒に収まるかにつきものになっています。
本質的に、私は現在、ajax呼び出しを行い、要素を生成する3つのメソッドを持っています。私がやりたい何か一つの機能いくつかのコールバック関数の1つをとるjquery関数/フレームワークを書くにはどうすればいいですか?

function RetrieveUsers() { 

     $.mobile.pageLoading(false); 

     $.ajax({ 
      dataType: "json", 
      contentType: "application/json;charset=utf-8", 
      type: "POST", 
      data: args, 
      url: "Default.aspx/RetrieveUsers", 
      success: function (d) { 

       $("#userList").empty(); 
       var html; 
       var rows = eval('(' + d.d + ')'); 

       for (var o in rows) { 
        var row = rows[o]; 
        html += '<li>' + row.name + '</li>'; 
       } 
       $("#userList").html(html); 
       $.mobile.pageLoading(true); 

      }, 
      error: function (x, t, e) { 
       alert(x.responseText); 
      } 
     }); 

の例は、AJAX呼び出し機能を再利用し、バックフォーム上の所望の要素を移入する方法を知っている適切な方法に設定された行を渡すことです。

function SearchUsers(searchText) { 
    var url = "Default.aspx/SearchUsers"; 
    var parameterData = '{ "searchText": "' + searchText + '" }'; 
    CallPageMethod(url, parameterData, DisplayUsers(userData)); 
} 

function DisplayUsers(users) 
{ 
    //populate the element 
    var html; 
    for(var user in users) 
    { 
     html += '<li>' + user.userName + '</li>'; 
    } 

    $('#userList').html(html); 
    $.mobile.pageLoading(true); 
} 

function CallPageMethod(url, paramterData, callbackFunctionWithArgs) 
{ 
    $.mobile.pageLoading(); 
    $.ajax({ 
     dataType: "json", 
     contentType: "application/json;charset=utf-8", 
     type: "POST", 
     data: paramterData, 
     url: url, 
     success: function (d) { 
      var rows = eval('(' + d.d + ')'); 
      callbackFunctionWithArgs(rows); 


     }, 
     error: function (x, t, e) { 
      alert(x.responseText); //just use generic alert for now 
     } 
} 

とインスタンスのための私のタスク検索は現在、次のようになります。

function SearchTasks(searchType, searchText) 
{ 
    var url = "Default.aspx/SearchTasks"; 
    var parameterData = '{ "searchType": "' + searchType + '", "searchText": "' + searchText + '" }'; 
    CallPageMethod(url, parameterData, DisplayUsers(userData)); 

} 

function DisplayTasks(tasks) 
{ 
    var html; 
    for(var task in tasks) 
    { 
     html += '<li>' + task.Status + ', ' + task.Description + '</li>'; 
    } 

    $('#taskList').html(html); 
    $.mobile.pageLoading(true); 
} 

誰も私がこれを配線する方法を理解することができるだろうか? マット

答えて

1

まあ最初の読み取りから合理的に見える

おかげで、あなたがが覚えておく必要がある1つの事:あなたはこの意志として、あなたは()を使用するか、引数を渡すべきではない関数への参照を渡すしようとしている場合関数を呼び出す代わりに結果を返します。

ので、

CallPageMethod(url, parameterData, DisplayUsers(userData)); 

は、おそらく次のようになります。

CallPageMethod(url, parameterData, DisplayUsers); 
+0

おかげで、私は – mattpm

+0

おかげで、それは素晴らしいことだ、試みることを与えます。最後に、CallPageMethodを別の.jsスクリプトファイルに移動します。私はこれを試して、ページはメソッドを呼び出すことができますが、スクリプトファイルはコールバック関数を見ることができません。これは範囲に問題がありますか?さらに重要なのは、CallPageMethodが呼び出された場所に関係なく、CallPageMethodが渡されたメソッドを確実に呼び出せるようにするにはどうすればよいですか? – mattpm

関連する問題