我有一个包含语言文件"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 变量的情况下执行此操作(因为我每种语言需要一个语言文件)。
索引.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();">
郎.php
<script>
var errorMessage = "Error during ajax call";
</script>
<?php
$var1 = "Welcome";
$var2 = "Header";
?>
阿贾克斯.php
include "lang.php";
$array = array($var1, $var2);
echo json_encode($array);
die();
谢谢你的帮助。
错误,我真的不知道从哪里开始:)但这里有一个可能的解决方案:
在 ajax 中.php在 lang 之前设置一个变量.php像这样包含 "$isAjax = true;",然后在 lang 中.php使整个"脚本"部分与该变量一致
<?if(!$isAjax){?>
<script>....</script>
<?}?>
就是这样!当你调用 ajax 时,你不再需要 javascript lang 变量.php因为它们已经在 index.php 中加载了。
或:
用所有 lang 依赖数据创建一个"lang.php",以及你在 JS 中使用的数据。然后将它们包含在所有页面中,并在主页(不是 ajax)上包含一个其他文件,假设"langJS.php",内容如下:
<script>
var errorMessage = <?=$lang['JSerrorMessage']?>;
var thankyouMessage = <?=$lang['JSthankyouMessage']?>;
...
</script>
你可以在 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/
问题是你混合了很多东西,你失去了图片。错误是您在 php 中的 json_encode
函数之前输出文本。这意味着 jquery ajax 函数无法智能猜测答案的内容类型是纯文本或格式错误的 json。
另一个错误是,如果您没有从 Web 服务器返回与 status : 200OK
不同的内容,则不会调用 jquery ajax 中的 error: function() { }
你对页面上显示的javascript文本和php变量都使用lang.php,这可能很好,或者至少这本身不是错误。
您的问题有多种解决方案,一种是@minychillo回答的解决方案一个更干净的解决方案是将js消息和php(用于动态页面)消息的文件分开。
我会做一个朗.js
var errorMessage = 'message1';
var thankyouMessage = 'message2';
我会包含在页面中
<script src="lang.js" />
我会让 php 文件没有脚本部分。