【问题标题】:Including php file with php and javascript variables into ajax file将带有 php 和 javascript 变量的 php 文件包含到 ajax 文件中
【发布时间】:2015-01-02 15:33:27
【问题描述】:

我有一个包含语言文件“lang.php”、“index.php”和 ajax 调用文件“ajax.php”的应用程序。 Lang 文件包含我在“index.php”和“ajax.php”中包含的 php 和 javascript 变量,因此我可以通过翻译“lang.php”文件来更改语言。

问题是当我在“ajax.php”中包含“lang.php”时,因为它在<script></script> 标签中包含javascript 变量,而ajax 将其解释为输出。当我删除<script> 标签并且“lang.php”仅包含 php 变量时,它可以正常工作。这是我的文件的内容。如何在不删除 javascript 变量的情况下执行此操作(因为我需要每种语言一个语言文件)。

index.php

include "lang.php";
function test()
{   
$.ajax({
    url: 'ajax.php',
    type: 'POST',
    success: function(data) {
        //manipulating returned json;   
    },
    error: function() {
        alert(errorMessage);
    }
});
};
<input type="button" onclick="test();">

lang.php

<script>
   var errorMessage = "Error during ajax call";
</script>
<?php
   $var1 = "Welcome";
   $var2 = "Header";
?>

ajax.php

include "lang.php";
$array = array($var1, $var2);
echo json_encode($array);
die();

感谢您的帮助。

【问题讨论】:

  • 我对这里的问题有点困惑。 什么 你想要ajax.php 输出吗?附言在 PHP 文件中,如果您在&lt;?php ?&gt; 标签的之外,则内容将被回显。另外,您的 index.php 中是否有 &lt;script&gt; 标签?
  • 我已经编辑了问题,很抱歉造成混淆。 Ajax.php 返回 json 对象,在 index.php 中我需要在 ajax 调用的成功部分操作该对象。是的,我在 index.php 中有脚本标签。
  • @user2204356 我添加了一个带有其他选项的 aswer,检查一下。

标签: javascript php ajax


【解决方案1】:

这种方法有很多错误,我真的不知道从哪里开始 :) 但这里有一个可能的解决方案:

在 ajax.php 中,在 lang.php 之前设置一个变量,像这样“$isAjax = true;”,然后在 lang.php 中将整个“脚本”部分设置为该变量的条件

<?if(!$isAjax){?>
 <script>....</script>
<?}?>

就是这样!调用 ajax.php 时不再需要 javascript lang 变量,因为它们已经加载到 index.php 中。

或者:

使用所有依赖于语言的数据创建一个“lang.php”,以及您在 JS 中使用的数据。然后将它们包含在所有页面中,并且在主页(不是 ajax)上包含另一个文件,比如说“langJS.php”,其内容如下:

<script>
var errorMessage = <?=$lang['JSerrorMessage']?>;
var thankyouMessage = <?=$lang['JSthankyouMessage']?>;
...
</script>

【讨论】:

  • 这甚至是使页面多语言的好方法吗? :/附言感谢您的回复和帮助。
  • 多语言有很多方法。最佳实践是使用一个对象,但您似乎并不喜欢 OOP。由于您的示例相当基本,因此我假设您不是在这里从事大型项目。
【解决方案2】:

您可以在 ajax 调用中强制使用数据类型,以要求 jQuery 将您的 ajax 结果视为 HTML(带有要评估的脚本)。您必须使用 dataType 设置。

$.ajax({
    url: 'ajax.php',
    dataType: 'html',
    type: 'POST',
    success: function(data) {
        alert(data);    
    },
    error: function() {
        alert(errorMessage);
    }
});

更多详情http://api.jquery.com/jQuery.ajax/

【讨论】:

    【解决方案3】:

    问题是你混合了很多东西而你丢失了图片。错误是您在 php.ini 中的 json_encode 函数之前输出文本。这意味着 jquery ajax 函数无法智能猜测答案的内容类型,即纯文本或格式错误的 json。

    其他错误是,如果您没有返回与状态不同的内容,则不会调用 jquery ajax 中的 error: function() { }:来自 Web 服务器的 200OK

    您将 lang.php 用于页面上显示的 javascript 文本和 php 变量,这可能没问题,或者至少这本身不是错误。

    您的问题有多种解决方案,一种是@minychillo 回答的一种 更简洁的解决方案是将 js 消息和 php(用于动态页面)消息的文件分开。

    我会做一个 lang.js

    var errorMessage = 'message1';
    var thankyouMessage = 'message2';
    

    我将包含在页面中

    <script src="lang.js" />
    

    我会留下没有脚本部分的 php 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2012-02-19
      • 1970-01-01
      • 2010-12-08
      相关资源
      最近更新 更多