Javascript 使用jQuery和PHP加载区域设置变量

Javascript 使用jQuery和PHP加载区域设置变量,javascript,php,jquery,Javascript,Php,Jquery,我试图将一些局部变量加载到一个页面上,该页面应该有不同的文本,这取决于用户的系统(或浏览器)语言。以下是我迄今为止所做的: 一个简单的HTML页面: <html> <head> <title>Page title</title> <<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js">&

我试图将一些局部变量加载到一个页面上,该页面应该有不同的文本,这取决于用户的系统(或浏览器)语言。以下是我迄今为止所做的:

一个简单的HTML页面:

<html>
    <head>
        <title>Page title</title>
        <<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
        <link rel="stylesheet" type="text/css" href="/css/style.css">
        <script>
            $( document ).ready(function() {
                jQuery.ajax({
                    url: "login_backend.php",
                    dataType:'json',
                    success:function(response)
                    {
                        $('#loginline').html(response.first );
                        $('#passwordline').html(response.second );
                    }
                });


            });
        </script>

    </head>
<body link='#b9b5b1' vlink='#f2f0ed' alink='#908f8e'>
<table width='100%' height='100%'>
<form method='POST' action='buzz-login.php' enctype=utf-8 accept-charset=utf-8>
<tr>
<td align=center><table>

<tr>
<td><table>
<tr>
<td><div id = "loginline" class = "loginline">Test1:</div></td>
<td><input type='text' name='login' size='15'></td>
</tr>
<tr>
<td><div id = "passwordline" class = "passwordline">Test2:</div></td>
<td><input
type='password' name='password' size='15'></td>
</tr>
</table></td>
</tr>
<tr>
<td align = center><input type='submit' name='ok'
value='$login_button'></td>
</tr>
<tr>
<td align = center><font color='red'>Random msg</font></td>
</tr>
</table></td>
</tr>
</form>
</table>
</body>
</html>

页面标题

.ajax
请求的
success
回调中的
response
变量不会返回
第一个
第二个
键。如果您查看您的
login\u backend.php
(为什么称为login\u backend?我没有看到任何关于登录的具体内容),它返回一个包含键
loginline
密码行
的数组,如中所示

{
  "loginline": "ID",
  "passwordline": "Password"
}
在处理异步请求时,请使用浏览器的开发人员控制台(例如Firebug或类似工具)验证这一点

您的
.ajax
请求设置告诉我您需要一个JSON,
数据类型:'JSON'
。您应该通过正确设置其标题来告诉PHP文件(在您的例子中是login_backend.PHP),它返回的内容是JSON类型的

<?php
  header('Content-Type: application/json');
  .. code ..

  echo json_encode($locale);
一般来说,在使用任何第三方来源为您解决本地化问题之前,开始编写您自己的材料是一件好事。尽管您的设置步骤太多了

首先,从
'locale/{$\u SESSION['locale']}.php'
中包含的变量列表中,在login_backend.php中构建一个数组
$locale
,将每个变量复制到其等效键,即使变量/键名几乎相同

通过让文件
en.php
立即返回此数组,可以简化此过程

<?php
  /** file: en.php */
  return [
    'login_line' => 'ID',
    'password_line' => 'Password'
  ];

第一个
和第二个
键代表什么?看不到PHP中声明的任何值,例如
response['pasword\u line']
应该可以工作。运行http请求的成本非常高。我觉得这是好的,如果你把它放在页面加载只。如果操作需要更多的时间(从api获取数据等),我觉得最好通过ajax加载。谢谢您提供的有用提示。目前,我已经对jquery函数进行了以下修改:success:function(response){$('#loginline').html(loginline);$('#passwordline').html(passwordline);},并且login_backend.php添加了标题('Content-Type:application/json');我使用了firebug并确定php返回正确的数据,但是jquery没有用正确的值替换div(由于某种原因,现在它们是空的)。你能帮我找出jquery有什么问题吗?如果你对backend_login.php文件做了我建议的更改,你应该使用
response.password\u line
或者
response['password\u line']
$('loginline').html(response['loginline');成功了,非常感谢!
<?php
  header('Content-Type: application/json');
  .. code ..

  echo json_encode($locale);
session_start();
// detecting language
$_SESSION['locale'] = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
// loading locale file with proper prefix    
include "locale/{$_SESSION['locale']}.php";
/* close session lock */
session_write_close();
<?php
  /** file: en.php */
  return [
    'login_line' => 'ID',
    'password_line' => 'Password'
  ];