每次有人点击某个按钮时,我都会尝试使用AJAX来包含语言PHP文件,所以我使用提交方法创建了两个输入:
<input type="submit" id="spanish" name="es" value="Spanish"/><br>
<input type="submit" id="english" name="en" value="English"/>
然后我使用jQuery脚本向服务器建立AJAX请求:
<script>
$('#spanish').click(function(){
$.ajax({
url: "init.php",
type: "POST"
})
})
$('#english').click(function(){
$.ajax({
url: "init.php",
type: "POST"
})
})
</script>
我想通过AJAX请求将输入值传递给我在init.php
中创建的PHP函数:
if (($_SERVER["REQUEST_METHOD"] === "POST") && (isset($_POST['es']))) {
include $lang . 'spanish.php';
} elseif (($_SERVER["REQUEST_METHOD"] === "POST") && (isset($_POST['en']))) {
include $lang . 'english.php';
} else {
include $lang . 'english.php';
}
另外,在这种情况下,我不知道如何使用success()
或done()
方法。我想没有返回任何值或数据!我对AJAX有点困惑,因为这是我第一次需要使用它。
更新: @Sacha不,它不会像添加新东西那样追加。在我的页面中,我正在为每个单词或段落使用语言函数,我希望在确定的语言中使用它的含义。例如,在我的网站上有一个名为“关于我们”的标签,将此标签翻译成另一种语言的等效含义我在该标签内调用语言功能,在我的PHP英文文件中我已经创建了一个名为lang的函数:
function lang( $phrase ) {
static $lang = array(
'HOME' => 'Home',
'CATEGORIES' => 'Our Services',
'CONTACT' => 'Contact Us',
'TEAM' => 'Our Team',
'ABOUT' => 'About Us',
'WELCOME' => 'You are welcome',
'WELCOME_MESSAGE' => 'Your are welcome',
'LANGUAGE' => 'English')
return $lang[$phrase];}
同样对于西班牙语,我有相同的功能,但我的西班牙语单词和句子。当有人点击特定按钮时,我需要包含其中一个文件。这就是我需要从Ajax脚本中为我实现的目标。希望这个评论足够解释。
另一个更新: 再次感谢@Sacha:D。实际上我已经尝试了这个并且它与语言文件完美配合,包括但是我也使用这个按钮来改变我的主题CSS文件并使用简单的jQuery脚本将其替换为另一个CSS目录。问题是当单击按钮时,由于POST,GET方法和样式文件永远不会更改页面重新加载。这就是为什么我需要AJAX来包含我的PHP文件,然后我可以避免页面重新加载操作。
答案 0 :(得分:0)
您可以使用GET并使其更容易..
// Drop down menu
$(".shopDrop").hide();
$(".shop ul li").hover(function(){
$(this).find(".shopDrop").slideDown();
}, function(){
$(this).find(".shopDrop").slideUp();
});
// Drop down menu info
$("#doublePoints").hover(function(){
console.log("in");
$(this).find(".shopHoverInfo").css("display", "block");
$(this).find(".shopHoverInfo").fadeIn();
}, function(){
console.log("out");
$(this).find(".shopHoverInfo").hide().fadeOut();
});
然后
<script>
$('#spanish').click(function(){
$.ajax({
url: "init.php?lang=es",
type: "GET"
})
})
$('#english').click(function(){
$.ajax({
url: "init.php?lang=en",
type: "GET"
})
})
</script>
可能有一种更简洁的方法可以达到相同的效果,但我的建议与你的方法非常相似。
顺便说一下,我认为这只是代码的一小部分,因为它本身并没有做多少。您可以在http://api.jquery.com/jquery.ajax/
了解如何使用done()答案 1 :(得分:0)
这个问题的解决方案非常简单,首先你需要按钮:
<button type="button" id="spanish" name="es" >Spanish</button><br>
<button type="button" id="english" name="en" >English</button>
然后,你不需要任何ajax,也不需要提交,只需这样:
$('#spanish').click(function(){
window.location.href = window.location.host + "/init.php&lang=es";
});
$('#english').click(function(){
window.location.href = window.location.host + "/init.php&lang=es";
});
这将使按钮重新加载页面,发送查询字符串。
然后你必须将它预备到init.php:
if (($_SERVER["REQUEST_METHOD"] === "GET") && isset($_GET['lang']) && $_GET['lang'] == "en" ) {
include $lang . 'spanish.php';
} elseif (($_SERVER["REQUEST_METHOD"] === "GET") && isset($_GET['lang']) && $_GET['lang'] == "en") {
include $lang . 'english.php';
} else {
include $lang . 'english.php';
}
请记住,我们使用的是get而不是post。
答案 2 :(得分:0)
简而言之,ajax无法与从运行的页面的PHP进行交互,因为该代码已经运行。因此,您不能包含带有ajax的PHP文件,但您可以将数据发送到外部PHP脚本进行处理,并使用返回的结果更新当前页面。
通过它的声音,你不需要那个,并且会逃脱一个简单的重定向,因为似乎在其他地方为你工作。这是一种简单的方法,您可以随时调整它以使用AJAX函数而不是重定向。
<强> HTML 强>
如果您为所有按钮提供一个类并使用数据标记,则只需要一次单击功能。
<button class='submitButtons' data-lang='en'>English</button>
<button class='submitButtons' data-lang='es'>Spanish</button>
<button class='submitButtons' data-lang='it'>Italian</button>
etc...
<强>的jQuery 强>
$(".submitButtons").click(function(){
var langClicked = $(this).data("lang");
window.location.href = window.location.href + "/init.php?lang=" + langClicked;
}
PHP - init.php
if(isset($_REQUEST['lang'])){
$langPath = "/path/to/included/files/dir/";
$lang = trim($_REQUEST['lang']); // any other cleanup here
$ext = ".php"; // file extension
$fullPath = $langPath . $lang . $ext;
if(file_exists($fullPath)){
include $fullPath;
}
}
因此,您所包含文件的名称将是您在data-lang属性中添加的内容以及文件扩展名,例如'en.php','es.php'