なぜこれがうまくいかないのか完全にはわかりません。Jクエリ初心者。私が見たすべての例によれば、うまくいくはずですが、そうではありません。
次のスクリプトでは、関数は変数に新しい値を設定しますが、新しい値は関数の外では保持されません。(コンソールログはこれを示しています)
$(document).ready(function() {
// url
var path = location.pathname.split("/"),
pos1_path = path[1] != undefined ? path[1] : false,
pos2_path = path[2] != undefined ? path[2] : false,
pos3_path = path[3] != undefined ? path[3] : false;
//console.log('before: ' + pos2_path);
if (pos1_path = 'article') {
$.post("/js/ajax/article_crumbs.php", { func: "getArticleCrumbs" },
function(data){
pos2_path = data.category;
//console.log('during: ' + pos2_path);
return pos2_path}, "json");
}
//console.log('after: ' + pos2_path);
// navigation
// set category nav to current category
if ( path[2] ) {
$('#category_nav a[class$="' + pos2_path + '"]').toggleClass('current');
}
else {
$('#category_nav a:first').toggleClass('current');
}
});
PHP:
<?php echo json_encode(["category"=>"arts-and-culture"]);
また、コンソールの出力によると、「after」の出力が「during」の前に表示されますが、これはスクリプトの残りの部分が終了するまで関数が実行されないことを意味しますか?
編集:明確にするために、スクリプトの{ if(path[1]) setcurrent }部分を{ if(pos1_path = 'article') }部分から除外して、 pos1_path が記事でない場合に値を設定する必要がありますURIにあるものは何でも..
以下の回答による解決策:
$(document).ready(function() {
// url
var path = location.pathname.split("/"),
pos1_path = path[1] != undefined ? path[1] : false,
pos2_path = path[2] != undefined ? path[2] : false,
pos3_path = path[3] != undefined ? path[3] : false;
if (pos1_path = 'article') {
//console.log('before: ' + pos2_path);
var data = {id: pos2_path}
$.ajax({
type: 'POST',
url: "/js/ajax/article_crumbs.php",
data: data,
success: function(data){
pos2_path = data.category;
//console.log('during: ' + pos2_path);},
dataType: "json",
async: false
});
}
//console.log('after: ' + pos2_path);
// navigation
// set category nav to current category
if ( path[2] ) {
$('#category_nav a[class$="' + pos2_path + '"]').toggleClass('current');
}
else {
$('#category_nav a:first').toggleClass('current');
}
}