当通过Ajax调用该文件时,PHP文件中数组内的PHP值显示错误!

时间:2010-07-13 13:28:20

标签: php ajax

我使用Fancybox

以下列方式调用php文件

的index.php:

<div class="pic">
            <a id="showcase1" href="showcase/showcase1.php"><img src="images/showcase1t.png"/></a>
        </div><!-- .pic -->

showcase/showcase1.php内我有以下代码:

<?php include_once '../localization.php'; ?>
<div id="inline">
    <img src="images/showcase2.png"/>
    <?php echo l('inline_p'); ?>
    <a href="http://studyatbest.com"><?php echo l('inline_a'); ?></a>
</div>

从语言文件(lang.en.php)调用数组中的值:

'inline_p' => ' <p><strong>Previous</strong> = Left Arrow Key</p>
                <p><strong>Next</strong> = Right Arrow Key</p>
                <p><strong>Close</strong> = Esc</p>',
'inline_a' => 'Visit',

由“控制器”(localization.php)帮助:

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX

if(isSet($_GET['lang'])) {
    $lang = $_GET['lang'];

    // register the session and set the cookie
    $_SESSION['lang'] = $lang;
    setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang'])) {
    $lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang'])) {
    $lang = $_COOKIE['lang'];
}
else {
    $lang = 'en';
}

// use appropiate lang.xx.php file according to the value of the $lang
switch ($lang) {
case 'en':
    $lang_file = 'lang.en.php';
    break;

case 'es':
    $lang_file = 'lang.es.php';
    break;

case 'zh-tw':
    $lang_file = 'lang.zh-tw.php';
    break;

case 'zh-cn':
    $lang_file = 'lang.zh-cn.php';
    break;

default:
    $lang_file = 'lang.en.php';
}

//translation helper function
function l($localization) {
    global $lang;
    return $lang[$localization];
}

    include_once 'languages/'.$lang_file;
?>

如果我直接打开showcase/showcase1.php,数组会完美地显示语言文件中的值,但是当使用fancybox从锚链接调用时,它会显示:

  

致命错误:调用未定义   函数l()in   d:\ WAMP \ WWW \项目\ alexchen \ alexchen2.6 \展示\ showcase1.php   在第3行

有什么建议吗?

修改l是语言文件中的数组,但我稍后将其用作函数(请参阅localization.php的末尾)。

4 个答案:

答案 0 :(得分:1)

你应该使用require_once来做这些调用。我会冒险发现它没有找到localisation.php。

Include仅在文件不存在时发出警告,而require将发生致命错误。如果没有它,程序将无法正常工作,请始终使用require over include。

相对而言,是从不同的路径调用AJAX版本吗?

答案 1 :(得分:1)

我发现了问题。在localization.php中调用langauages/lang.en.phpshowcase/showcase1.php时,PHP代码无法归档这些文件。我将所有展示文件放在根目录中,现在一切正常。感谢他们帮助我找到答案的回复!

答案 2 :(得分:0)

我不确定,但我要尝试的第一件事就是复制来自localcase.php里面的localization.php的所有代码。如果以这种方式AJAX调用工作,那么你可以确定fancybox调用php的方式有问题。然后我会使用Firebug或实时http头Firefox扩展来检查showcase1.php的调用方式。

答案 3 :(得分:0)

添加error_reporting(E_ALL);在那里。我怀疑你在尝试包含localization.php时遇到了另一个错误,并且由于某种原因它没有显示出来。您可能还必须在php.ini中启用display_errors,或使用ini_set()。

使用工具找出直接调用脚本和使用AJAX调用脚本之间的不同之处。我推荐Fiddler。