混合html/jsajax応答でjavascriptコードにアクセスするのに問題があります。jQueryajaxdocは次のように述べています。
htmlが指定されている場合、HTMLが文字列として返される前に、取得されたデータ内に埋め込まれたJavaScriptが実行されます。
これは、HTMLの返信に簡単なスニペットを追加することで確認できます。
<script type="text/javascript"> alert($(this)); </script>
それでは、jsコードへのアクセスと1回限りの実行を維持するにはどうすればよいですか?モーダルログインを実装しようとしています(フォーム送信画面でのセッションタイムアウト時のデータ損失を防ぐため)。もちろん、ajaxのjsコードにアクセスして、電子メール/パスワードフィールドを検証し、ajaxがリモートサーバー上のユーザー資格情報を認証できるようにする必要があります。
モーダルログインのコーヒースクリプトスニペットは次のとおりです。
# submit form
$.ajax
success: (data) -> ...
error: (data) ->
popAuth(data.responseText) if(data.status == 401)
popAuth = (title) ->
$.fancybox({
href: "/login"
ajax: { type: "GET" }
title: title
})
おそらく、成功したコールバックをpopAuth()ajaxオプションに追加して、返されたjsコードを保存できますか?jQueryの「ライブ」ハンドラーはどうですか?残念ながら、このシナリオは期待するほど単純ではありません;-)私は$.getScript
オプションとして見ましたが、サーバー側がすでにhtml + jsをアセンブルし、元のajax呼び出しがそれをすべてプルダウンするため、htmlをjsから分離しないことを好みます一度に。(つまり、jsファイルコンテンツバンドルを送り返すための専用サーバー側コントローラーの作成は避けてください)
もちろん、この問題を回避するための代替ソリューションを受け入れています。たとえば、ログインフィールドとjsログイン検証コードをすべての画面(WordPressフロントエンドの背後にあるJVM CRUDアプリケーションであるため、すべての画面は基本的に認証が必要です)に非表示のdivに保存し、モーダルログインウィンドウを「ローカル」にポップできます。私は、リモートajaxコンテンツの面倒な1回限りのjs実行を回避すると思います。
とにかく、アイデアはありがたいです!クライアントサイドは素晴らしくシンプルで...ひどく複雑です;-)