基本的には、JQuery $.post
を使用してPHPを介してコールバック関数を渡すことを試みています。次のようなものがあります。
ここで、はテーブルを含むページを作成します。テーブルの行には、コールバック関数を呼び出すハンドラがonclick
です。
問題は、この方法でこの方法で投稿するとundefined
として送信し、それを引用符で囲むと、呼び出すときに関数ではないというエラーが表示されます。
私が記述していることを行う方法はありますか?
基本的には、JQuery $.post
を使用してPHPを介してコールバック関数を渡すことを試みています。次のようなものがあります。
ここで、はテーブルを含むページを作成します。テーブルの行には、コールバック関数を呼び出すハンドラがonclick
です。
問題は、この方法でこの方法で投稿するとundefined
として送信し、それを引用符で囲むと、呼び出すときに関数ではないというエラーが表示されます。
私が記述していることを行う方法はありますか?
文字列として(二重引用符で囲まれた関数本体、おそらくエスケープ文字を使用)として渡します。
関数は、通常のjavascript変数です。ここでは呼び出されません。 – Frizi
でも、次のようにする必要があります:{'callbackfunc': "function(info){alert(info);}"} –
あなたが説明していることをする方法はありませんが、あなたが望むことを行うための多分方法があります。 (私はあなたが欲しいものはわかりません)
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);
});
}
私はそれを説明する最良の方法は、同じテーブルなので、3つのページすべてが同じ$ .postを呼び出して、テーブルをAJAXXXでロードします。ただし、各ページは、ユーザーが表の行をクリックしたときに、何か異なる動作をします。 1ページ目では、行IDに2ページ目を、3ページ目にはリダイレクトしたいと考えています。したがって、trのonclickハンドラを介して呼び出される各ページから別のコールバック関数を渡したい – awestover89
がある方法ですが、通常はお勧めできません。あなたは文字列として関数を渡すことができ、次にjavascriptで関数を受け取ったときにeval()関数を使います。
function loadPage()
{
$.post('myurl.php', { 'callbackfunc' : "function (info) { alert(info); }" },
function(data) {
$("#divid").html(eval(data));
});
}
適切なコールバックでPHPコードを作成するのではなく、テーブルが返された後でテーブル行に関数をアタッチすることができます。
function loadPage(callbackfunc)
{
$.post('myurl.php', {},
function(data) {
$("#divid").html(data);
$("#divid").find("tr").each($(this).click(callbackfunc));
});
}
私はあなたがPHPでこの機能で何をしようとしているのですか? – mkoryak
AJAXポストは、データベースの情報を含むテーブルを作成します。ユーザーがテーブルの行をクリックすると、コールバック関数が呼び出されます。これにより、テーブルが移植可能になり、onclickが使用される場所ごとに異なるようになります。 – awestover89