【问题标题】:Take variable from a PHP file using AJAX/JavaScript使用 AJAX/JavaScript 从 PHP 文件中获取变量
【发布时间】:2014-04-16 18:24:13
【问题描述】:
I have a form that uses AJAX and Javascript to submit itself.

HTML:

<h3>Sign Up Here</h3>
<form name="signupform" id="signupform" onsubmit="return false;">
<div>Username:</div>
<input id="username" type="text" onblur="checkusername()" onkeyup="restrict('username')" maxlength="16" />
<span id="unamestatus"></span>
<div>Email Address:</div>
<input id="email" type="text" onfocus="emptyElement('status')" onkeyup="restrict('email')" maxlength="88" />
<div>Create Password:</div>
<input id="pass1" type="password" onfocus="emptyElement('status')" />
<div>Confirm Password:</div>
<input id="pass2" type="password" onfocus="emptyElement('status')" />
<div>Gender:</div>
<select id="gender" onfocus="emptyElement('status')">
    <option value=""></option>
    <option value="m">Male</option>
    <option value="f">Female</option>
</select>
<div>Country:</div>
<select id="country" onfocus="emptyElement('status')">
    <option value="england">England</option>
</select>
<button id="signupbtn" onclick="signup()">Create Account</button>
<span id="status"></span>

Ajax/JS:

function signup(){
    var u = _("username").value;
    var e = _("email").value;
    var p1 = _("pass1").value;
    var p2 = _("pass2").value;
    var c = _("country").value;
    var g = _("gender").value;
    var status = _("status");

    if(u == "" || e == "" || p1 == "" || p2 == "" || c == "" || g == ""){
        status.innerHTML = "Message 1"; 
    } else if (p1 != p2){
        status.innerHTML = "Message 2!";
    } else {
        _("signupbtn").style.display = "none";  
        status.innerHTML = "please wait...";
        var ajax = ajaxObj("POST", "signup.php");
        ajax.onreadystatechange = function(){
            if(ajaxReturn(ajax) == true){
                if(ajax.responseText != "signup_success"){
                    status.innerHTML = ajax.responseText;
                    _("signupbtn").style.display = "block"; 
                } else {
                    _("signupform").innerHTML = "Message 3";
                }
            }
        }
        ajax.send("u="+u+"&e="+e+"&p="+p1+"&c="+c+"&g="+g);
    }
}

如您所见,我的第二个代码中有Message 1Message 2Message 3。 这是我遇到麻烦的部分:我将有多个语言文件,其中包含与某些文本相关的一些变量。例如,在我的 french.php 文件中,我将拥有:$welcome = 'Bonjour!'。然后我将检查 MySQL 表中的默认语言并确定它是什么。这很简单。但是我怎样才能让 AJAX 获取 $welcome 变量并使用它而不是 Message 1 例如?

对于沙里科夫:

<head>
<?= include_once("language.php"); ?>
<script type="text/javascript"> 
    window.onload = function() {
        function _(x){ 
            return document.getElementById(x); 
        } 
        var welcome = <?=json_encode($welcome);?>
        _("test").innerHTML = '<h2>Mesajul este: ' + welcome + '</h2>'; 
    }
</script>
</head>
<body>
   <div id="test"></div>
</body>

【问题讨论】:

  • 为什么不在 signup.php 或相关函数中处理生成 Message 1Message 2Message 3 字符串或相关函数(例如,在 AJAX 调用的 PHP 部分中生成响应消息服务器端而不是事后通过 JS 在客户端执行此操作)。然后,您可以检查 PHP 脚本本身的本地化并返回已翻译的 Message 1Message 2Message 3 作为 AJAX 响应的一部分。
  • 我一直在考虑这个问题,如果我将所有消息都放在signup.php 中,signup.php 将会超载。我将有多个包含相同变量的 php 文件,但将声明不同的值。例如:在english.php 文件中,$welcome 将设置为“欢迎”,但在french.php 中,相同的变量将设置为“Bonjour”。在包含文件之前,我将检查 SQL 数据库内部以查看设置的默认语言。如果设置为法语,它将包括french.php。我可以显示这些消息的方式是唯一的问题。

标签: javascript php ajax echo take


【解决方案1】:

添加代码的新答案

&lt;?= include_once("language.php"); ?&gt;——这是错误的。只有在输出变量时才能使用&lt;?=&lt;?=$welcome;?&gt; == &lt;?php echo $welcome; ?&gt;)。您必须从此 php 标记中删除 = 符号。 &lt;? include_once("language.php"); ?&gt; 是正确的。

使用console.log(welcome)alert(welcome) 来确保已分配欢迎。

老答案 你输出这个js和html扔php吧?

你可以用这个:

// some php code
?>
<script type="text/javascript">
    var welcome = <?=json_encode($welcome); ?>
    // alert(welcome); // to make sure value is assigned in js
</script>
<?
//more php code or html output

您必须使用&lt;?=json_encode($welcome); ?&gt; 而不是简单的&lt;?=$welcome;?&gt;Marc B解释:

永远不要将任意文本从 PHP 转储到 javascsript 代码中。你是 极有可能引入 JS 语法错误并杀死整个 脚本。始终使用 json_encode:&lt;?= json_encode($welcome) ?&gt;

补充例子:

// more php
include_once("language.php"); 
// var_dump($welcome); // to debug what value assigned to $welcome
?> 
<script type="text/javascript"> 
    window.onload = function() {
        function _(x){ 
        return document.getElementById(x); 
        } 
        var welcome = <?=json_encode($welcome);?>
        _("test").innerHTML = '<h2>Mesajul este: ' + welcome + '</h2>'; 
    }
</script>
<?
// more php

【讨论】:

  • 永远不要将任意文本从 PHP 转储到 javascsript 代码中。您很可能会引入 JS 语法错误并杀死整个脚本。 总是使用 json_encode:&lt;?= json_encode($welcome) ?&gt;
  • 谢谢。我编辑了我的答案。顺便说一句,我现在要编辑我的 js 文件 :)) 谢谢。我现在没有。我用php检查了变量,我想在js中输出什么。
  • 谢谢你们!它不能让它工作,你能帮我解决这个问题吗? &lt;?= include_once("language.php"); ?&gt; &lt;script type="text/javascript"&gt; function _(x){ return document.getElementById(x); } var welcome = &lt;?= json_encode($welcome);?&gt; _("test").innerHTML = '&lt;h2&gt;Mesajul este: ' + welcome + '&lt;/h2&gt;'; &lt;/script&gt; 这是我在文件头中的代码,即使我的变量设置为 language.php 文件中的文本,它也会打印 1。
  • 我的 #test div 仍然打印 1,即使我在 language.php 文件中的 $welcome 变量设置为“Hello!”...
  • $welcome 分配在哪里?试试var_dump($welcome);,然后告诉我它返回了什么。看版。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多