Значения PHP внутри массивов в файле PHP отображают ошибку, когда этот файл вызывается через Ajax! - PullRequest
3 голосов
/ 13 июля 2010

Я вызываю php-файл следующим образом, используя Fancybox

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 () в D: \ WAMP \ WWW \ проекты \ alexchen \ alexchen2.6 \ витрина \ showcase1.php по линии 3

Есть предложения?

EDIT : l - это массив в языковых файлах, но я использую его как функцию позже (см. В конце localization.php).

Ответы [ 4 ]

1 голос
/ 13 июля 2010

Я обнаружил проблему.Когда localization.php и langauages/lang.en.php вызываются в showcase/showcase1.php, код PHP не может подавать эти файлы.Я поместил все файлы витрины в корневой каталог, и теперь все работает.Спасибо за ответы, они помогли мне разобраться!

1 голос
/ 13 июля 2010

Вы должны использовать require_once для выполнения этих вызовов.Я бы рискнул, что он не находит localisation.php.

Включить будет только предупреждать, если файл не присутствует, в то время как требование будет фатальная ошибка.Если программа не будет работать правильно без нее, всегда используйте require over include.

Вызывается ли версия AJAX по другому пути, условно говоря?

0 голосов
/ 13 июля 2010

Добавить сообщение об ошибке (E_ALL); там. Я подозреваю, что вы получаете другую ошибку при попытке включить localization.php, и по какой-то причине она не появляется. Вам также может потребоваться включить display_errors в php.ini или с помощью ini_set ().

Используйте инструмент, чтобы выяснить, в чем отличие между вызовом сценария напрямую и вызовом его с помощью AJAX. Я рекомендую Fiddler.

0 голосов
/ 13 июля 2010

Не знаю точно, но первое, что я попробую, - это скопировать весь код из localization.php внутри showcase1.php. Если таким образом AJAX-вызов работает, то вы можете быть уверены, что есть проблема с тем, как fancybox вызывает php. Затем я бы использовал Firebug или прямые расширения Firefox для заголовков http, чтобы проверить, как вызывается showcase1.php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...