0

我在 index.php 页面上有 3 个链接:

<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() 函数而不在 index.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部分解析sk ?

4

3 回答 3

0

如果您的问题是 URL 中的参数,您可以尝试使用 Ajax ( http://api.jquery.com/jQuery.ajax/ ) 设置它,而不是重新加载页面。由于您的内容也应该更改为所选语言,因此我认为您无法刷新?

于 2012-04-24T14:23:11.047 回答
0
$(".flag").click(function(event) {
    event.preventDefault();
    $.get(this.href, function(data) {
        location.reload();
    });
});
于 2012-04-27T07:30:49.480 回答
0

你根本不需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 请求,而不是两个,
  • 当用户单击时,浏览器会立即做出反应:请求在单击后立即发送,因此浏览器的“加载图标”显示正在发生某些事情
  • action->reaction 的这种效果在用户体验中很重要,使用 AJAX 解决方案您必须等待第一个请求完成才能触发“加载图标”,
  • location.reload()AJAX 解决方案一起使用时可以显示一个对话框,例如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仅在需要的地方使用:)

你怎么看 ?

于 2012-04-27T08:09:10.900 回答