現在、個人 Web サイトに多言語サポートを実装しています (これも完全に ATM で再構築しています)。AJAX 投稿リクエストの後にページをリロードする必要があります。優先言語をセッションに保存しています。変更すると、当然更新されます。正しい翻訳を表示するには、ページをリロードする必要があります。問題は、このメソッドでは、セッションで優先言語を変更する前にページがリロードされる場合があり、その結果、当然のことながら AJAX ポスト リクエストが実行されなくなることです。
JavaScript:
function setLang(lang) {
$.post("languages/setLang.php", {"preflang":lang});
location.reload();
}
PHP:
<?php
session_start();
$_SESSION['PREFERRED_LANGUAGE'] = $_POST['preflang'];
?>
2
ASYNC 操作が完了するまで待ちます...別名: 成功ハンドラーからのリダイレクトを実行します
– ホンク デア ハセ
2020 年 9 月 3 日 11:55
そうですね、その解決策は私の脳には明白すぎます... もちろん、今は機能します、ありがとう!
–
user12744064
2020 年 9 月 3 日 11:59
現代的な方法は Promise になると思います...残念ながら、私はフロントエンドのことがあまり得意ではありません ;)
– ホンク デア ハセ
2020 年 9 月 3 日 12:05
------------------------
$.ajax を使用して ajax を送信してみてはいかがでしょうか
JS:
function setLang(lang) {
$.ajax({
url:"languages/setLang.php",
type:'POST',
data:{"preflang":lang},
dataType:'text',
success:function(response){
if(response=='true'){
location.reload();
}
}
});
}
PHP
<?php
session_start();
$_SESSION['PREFERRED_LANGUAGE'] = $_POST['preflang'];
echo 'true';
?>
この方法では、サーバーからコードを実行した後に ajax 呼び出しが応答を返した場合にのみ成功関数が実行され、ページをリロードできます。
2020 年 9 月 3 日 12:11 に回答
ビラル B
ビラル B
47
6
銅バッジ 6 個