我在页面索引上有 3 个链接.php:
<div id="languages">
<a href="index.php?page=test&lang=en" id="flag">
<img src="./images/flags/en.png" class="flag_off" alt="en" title="en">
</a>
<a href="index.php?page=test&lang=sk" id="flag">
<img src="./images/flags/sk.png" class="flag_off" alt="sk" title="sk">
</a>
<a href="index.php?page=test&lang=cz" id="flag">
<img src="./images/flags/cz.png" class="flag_on" alt="cz" title="cz">
</a>
</div>
它们中的每一个都在同一页面上传递 lang 参数(index.php)。然后我有变量
$_GET['lang']
这将调用函数来更改语言:
$obj->change_language($_GET['lang']);
问:如何使用 jquery get() 函数而不在索引.php页面的 url 中显示参数来执行此操作?
(通过 jquery 传递变量$lang)
我不喜欢调用函数后带有参数的 URL,例如:
index.php?page=test&lang=sk
我想使用 .click() 函数作为处理程序。
编辑:
我有这样的东西:
$(document).ready(function(){
$("#flag").click(function(){
$.get('index.php',
{ lang: "VARIABLE LANG FROM HREF" }
);
});
});
如何从 href index.php?page=test&lang=sk part 解析 sk?
如果您的问题是 URL 中的参数,您可以尝试使用 Ajax (http://api.jquery.com/jQuery.ajax/) 进行设置,而不是重新加载页面。我认为您无法绕过刷新,因为您的内容也应该更改为所选语言?
$(".flag").click(function(event) {
event.preventDefault();
$.get(this.href, function(data) {
location.reload();
});
});
你根本不需要jQuery
这样做。你可以做类似的事情
<div id="languages">
<a href="changeLanguage.php?lang=en">
<img src="/flags/en.png" alt="en" title="en">
</a>
<a href="changeLanguage.php?lang=sk">
<img src="/flags/sk.png" alt="sk" title="sk">
</a>
<a href="changeLanguage.php?lang=cz">
<img src="/flags/cz.png" alt="cz" title="cz">
</a>
</div>
然后,在这个changeLanguage.php
中,你做你的$obj->change_language($_GET['lang']);
(你应该检查/强制转换lang
参数的值),然后,你可以将用户重定向到引用页面,
$url = (string) $_SERVER['HTTP_REFERER'];
if (0 === strlen($url)) {
// redirect to the home page if there is no referer
$url = '/';
}
header('Location: '.$url);
这样,您就不需要任何Javascript
代码。我认为这在某些方面很重要:
- 使用 AJAX 解决方案,您只执行一个 HTTP 请求而不是两个请求,
- 当用户单击时,浏览器会立即做出反应:请求在单击后立即发送,因此浏览器的"加载图标"显示正在发生某些事情
- 这种动作>反应的效果在用户体验中很重要,使用 AJAX 解决方案,您必须等待第一个请求完成才能触发"加载图标",
- 与 AJAX 解决方案一起使用的
location.reload()
可以显示一个对话框,例如Would you like to submit the form again ?
如果用户已通过POST
请求到达此页面,并且他可能不了解其操作(更改语言)与此"错误"消息之间的关系,这也会导致用户体验下降, - 如果您的
Javascript
以某种方式损坏,如果您的页面更改语言仅更改语言,则这些链接可能根本不起作用。假设页面index.php?page=test&lang=en
正在执行类似$obj->change_language($_GET['lang']); exit;
的操作,因为此页面的目的只是更改语言。然后,如果 Javascript 代码因任何原因未被触发(代码被破坏,处理程序未绑定,用户在新选项卡中打开页面),则加载的页面将是一个空白页面。如果你处理这种情况,那么"更改语言页面"看起来像一个普通页面,没关系,但这意味着你将使用"完整"响应执行两个HTTP请求(一个用于更改语言,另一个在location.reload
之后),这导致了第一点, - 仅在需要的地方使用
Javascript
:)
你觉得怎么样?