これは、jQuery Ajax ウィザードの 1 つです。jQuery 1.7.2を使用していますが、1.5.1も試しました...
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
メイン ページは、外部 (同じドメイン) JS ファイルを読み込みます。クリック イベントからのコールバックでは、ログイン フォームを投稿してログインするための AJAX 呼び出しを行います。認証呼び出しから返されたパラメーター (JSON) に基づいて、コンテンツとナビゲーション バーをメイン ドキュメントに .load します。
$("#loginForm_submit").click(function() {
var action = $("#loginForm").attr('action');
var form_data = {
sbgusername: $("#sbgusername").val(),
sbpassword: $("#sbpassword").val()
};
$.ajax({
type: "POST",
url: action,
data: form_data,
success: function(loginData){
if(loginData.success == true){
// this will be moved into a loop to laod multiple apps into one page. For testing
// all arrays only have value
var webapps = loginData.webapps; //array
var webappservers = loginData.webappservers; //array
var webappscripts = loginData.webappscripts; //array
var webAppContent = webappservers[0] + ' #' + webapps[0] + 'Content';
// webAppContent = 'api/wpapp.cfm #wpContent';
var webAppNav = webappservers[0] + ' #' + webapps[0] + 'Nav';
// webAppNav = 'api/wpapp.cfm #wpNav';
var scriptURL = webappscripts[0];
// scriptURL = 'api/wpBase.js';
var scriptLoad = webapps[0] + 'Load';
// scriptLoad = 'wpLoad';
$("#sbcore").load(webAppContent); //sbcore is div in main document
$("#nav").load(webAppNav); //nav is div in main document
$.ajaxSetup({ cache: false },{async:false});
$.getScript(scriptURL, function(data, textStatus, jqxhr) {
window[scriptLoad](); //because getScript loads methods into global context from what I can tell
});
$.ajaxSetup({ cache: false },{async:true});
}
else
{ alert(loginData.message);
}
},
error: function(errorData){
alert("Server couldn't be reached. Please Try again.");
}
});
return false;
});
ロードされたナビゲーションバーは次のようになります。
<div id="menu">
<ul>
<li id="nw-menu-dashboard" class="first"><a href="#" accesskey="1" title="">Home</a></li>
<li ><a id="nw-menu-privatearticles" href="#" accesskey="2" title="">Articles</a></li>
</ul>
scriptLoad によって scriptURL として読み込まれる JS は次のとおりです (同じドメインから読み込まれることに注意してください)。
function nwLoad() {
//alert("nwBase.js ran");
nwLoadMenu();
}
function nwLoadMenu() {
//alert("here");
$("#nw-menu-dashboard").on("click",function() {
//e.preventDefault();
alert("doDashboard");
});
$("#nw-menu-privatearticles").on("click",function() {
//e.preventDefault();
alert("doPrivateArticles");
});
}
したがって、これは奇妙なことです。すぐ上の//alert("nwBase.js ran");
または のコメント//alert("here");
を外すと、メニューが div にバインドされ、メニュー クリック アラートが必要に応じて機能します。ただし、上記のように、バインディングの前にアラートがないと機能しません。.click、.live、を使用してバインディングを試みました。
同期、待機などのロードを試みましたが、機能しません。何か案は?