将带有 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);
}
});
这种方法有很多错误,我真的不知道从哪里开始:)
但这里有一个可能的解决方案:
在 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 文件。
我有一个包含语言文件 "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);
}
});
这种方法有很多错误,我真的不知道从哪里开始:) 但这里有一个可能的解决方案:
在 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 文件。