2011-10-28 4 views
0

基本的には、JQuery $.postを使用してPHPを介してコールバック関数を渡すことを試みています。次のようなものがあります。

ここで、はテーブルを含むページを作成します。テーブルの行には、コールバック関数を呼び出すハンドラがonclickです。

問題は、この方法でこの方法で投稿するとundefinedとして送信し、それを引用符で囲むと、呼び出すときに関数ではないというエラーが表示されます。

私が記述していることを行う方法はありますか?

+1

私はあなたがPHPでこの機能で何をしようとしているのですか? – mkoryak

+0

AJAXポストは、データベースの情報を含むテーブルを作成します。ユーザーがテーブルの行をクリックすると、コールバック関数が呼び出されます。これにより、テーブルが移植可能になり、onclickが使用される場所ごとに異なるようになります。 – awestover89

答えて

0

文字列として(二重引用符で囲まれた関数本体、おそらくエスケープ文字を使用)として渡します。

+0

関数は、通常のjavascript変数です。ここでは呼び出されません。 – Frizi

+0

でも、次のようにする必要があります:{'callbackfunc': "function(info){alert(info);}"} –

0

あなたが説明していることをする方法はありませんが、あなたが望むことを行うための多分方法があります。 (私はあなたが欲しいものはわかりません)

JS機能をサーバーに渡すことはできません。文字列を渡すことしかできません。

編集: あなたの応答に基づいて、私はそれがXSSを可能にするとして、これを行うためのあなたの方法は、良いが、危険ではないだけではないことを伝えることができます。

あなたがこのように表を挿入しているのdivにクリック機能を委任する方が良いでしょう:

function loadPage(){ 
    $("#divid").delegate('tr', 'click', function(evt){ 
     //this code is different per page, change color, alert, etc 
    }); 
    //after the above event is delegated, you can reload the table as much as you want, without needing to rebind the above event 
    $.post('myurl.php', function(data) { 
     $("#divid").html(data); 
    }); 
} 
+0

私はそれを説明する最良の方法は、同じテーブルなので、3つのページすべてが同じ$ .postを呼び出して、テーブルをAJAXXXでロードします。ただし、各ページは、ユーザーが表の行をクリックしたときに、何か異なる動作をします。 1ページ目では、行IDに2ページ目を、3ページ目にはリダイレクトしたいと考えています。したがって、trのonclickハンドラを介して呼び出される各ページから別のコールバック関数を渡したい – awestover89

1

がある方法ですが、通常はお勧めできません。あなたは文字列として関数を渡すことができ、次にjavascriptで関数を受け取ったときにeval()関数を使います。

function loadPage() 
{ 
    $.post('myurl.php', { 'callbackfunc' : "function (info) { alert(info); }" }, 
     function(data) { 
      $("#divid").html(eval(data)); 
    }); 
} 
0

適切なコールバックでPHPコードを作成するのではなく、テーブルが返された後でテーブル行に関数をアタッチすることができます。

function loadPage(callbackfunc) 
{ 
    $.post('myurl.php', {}, 
     function(data) { 
      $("#divid").html(data); 
      $("#divid").find("tr").each($(this).click(callbackfunc)); 
    }); 
} 
関連する問題