使用jQuery更改PHP变量内容而不刷新

时间:2016-06-14 10:52:40

标签: php jquery ajax

我有一个多语言网站 - 英语和德语。

我有一个文件content.php,其中存储了我的英语和德语内容。

以下是一个例子:

  $content_en = array(
    'title'       => 'title',
    'type'        => 'photography',
  );

  $content_de = array(
    'title'       => 'titel',
    'type'        => 'fotografie',
  );

在我的index.php中,我得到了这样的值:

  // Checking for browser default language
  $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

  // Storing browser default language in variable – either `$content_en` or `content_de`
  $content_lang = ${ 'content' . '_' . $lang };

  // Output title in browser default’s language
  echo $content_lang['title'];

但我也想在我的网站上安装语言切换器,以防浏览器默认语言不正确:

<button class="lang-en">EN</button>
<button class="lang-de">DE</button>

现在,我想根据$langen中点击的按钮更改变量de。重要的是:我喜欢在没有页面刷新的情况下更改的值。

我知道下面的代码不能像这样工作,但它确实描述了我想要实现的目标:

  $(' .lang-en' ).click( function( e ) {
    e.preventDefault();
    $lang = 'en';
  });
  $(' .lang-de' ).click( function( e ) {
    e.preventDefault();
    $lang = 'de';
  });

我不确定它是否有可能(例如使用ajax)但是也许有人有解决我问题的线索。

非常感谢!

2 个答案:

答案 0 :(得分:1)

PHP是服务器端代码,它只在页面加载时运行 - 一旦运行,它的变量被遗忘并报废,所以是的,你现在可能认为它是不可能的......好吧,没有。

AJAX使用请求执行脚本,但有一个使用响应的精彩发明;我们可以稍后偶像这个,但是现在,让我们专注于你的目标。

$('#lang-de').click(function() {
    $.post('index.php' { lang: de })
       .done(function(data) {
       });
});

在你的索引PHP文件中,你可以让POST控制器确定页面的语言,也可以作为会话捕获,即:

if(isset($_POST['lang']) || isset($_SESSION['lang'])):
    // Code to change language
   // Update the Session language
endif;

我们可以使用会话,所以一旦选择了语言,我们就不需要在每个页面上不断发布帖子以了解要使用的语言。

关于AJAX的事情是,通过页面输出收集响应,因此,您只需使用:

<div id="page-container">

然后在.done函数中使用它:

$('#page-container').html = data;

然后,这将把所有新语言和页面加载到当前的语言和页面中。

答案 1 :(得分:1)

您可以通过ajax请求您的php页面。

var content;
 $.ajax({
    url: "yourServerUrl/getLang.php?lan=en", 
    success: function(result){
            content = result;
        }
  });

现在,此内容必须包含getLang.php

返回的对象

getLang.php可以如下。

<?php

  $content_en = array(
    'title'       => 'title',
    'type'        => 'photography',
  );

  $content_de = array(
    'title'       => 'titel',
    'type'        => 'fotografie',
  );

if($_GET["lan"]=="en"){
echo json_encode($content_en);
}
else{
echo json_encode($content_de);
}

所以现在点击你的按钮,你可以调用php作为

$(' .lang-en' ).click( function( e ) {
    e.preventDefault();
$.ajax({
    url: "yourServerUrl/getLang.php?lan=en", 
    success: function(result){
            content = result;
        }
  });
    $lang = 'en';
  });


  $(' .lang-de' ).click( function( e ) {
    e.preventDefault();
$.ajax({
    url: "yourServerUrl/getLang.php?lan=de", 
    success: function(result){
            content = result;
        }
  });
    $lang = 'de';
  });

现在让我们假设你有2个标签,说<h1 id="title"></h1> 并在您的页面上显示<h2 id="type"></h2>以显示文字。

因此,您的ajax调用应如下所示进行修改。

$.ajax({
    url: "yourServerUrl/getLang.php?lan=en", 
    success: function(result){
            content = result;
            $("#title").text(content.title);
            $("#type").text(content.type);

        }
  });

这会根据需要自动将您的文字转到正确的位置并使用正确的语言。