将带有 php 和 javascript 变量的 php 文件包含到 ajax 文件中

Including php file with php and javascript variables into ajax file

我有一个包含语言文件 "lang.php"、"index.php" 和 ajax 调用文件 "ajax.php" 的应用程序。 Lang 文件包含 php 和 javascript 变量,我将它们包含在 "index.php" 和 "ajax.php" 中,因此我可以通过翻译 "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 调用中强制使用数据类型,以便让 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/

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

在 ajax.php 中设置一个变量,然后在 lang.php 中包含这样的“$isAjax = true;”,然后在 lang.php 中使整个 "script" 部分成为条件到那个变量

<?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>

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

其他错误是 jquery ajax 中的 error: function() { } 不会被调用,如果你没有返回不同于 status 的东西:200OK 来自网络服务器

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

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

我会做一个lang.js

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

我将包含在页面中

<script src="lang.js" />

而且我会保留没有脚本部分的 php 文件。