Невозможно получить доступ к глобальной переменной PHP в вызове jQuery.ajax в MediaWiki - PullRequest
1 голос
/ 27 марта 2012

У меня возникают проблемы с доступом к глобальным переменным, когда я выполняю AJAX-вызов функции php в среде MediaWiki.

Мой JJuery-вызов AJAX выглядит следующим образом:

jQuery.ajax({
    url: 'GeneralFunctions.php',
    type: 'GET',
    dataType: 'json',
    data: {
        text: anchorText
    },
    success: function (data) {
        alert("data: " + data);
    }
});

Мой файл GeneralFunctions.php выглядит следующим образом:

<?php
if (isset($_GET['text'])) {
    jsonInlineParse((string) $_GET['text']);
}
function jsonInlineParse($wikiText)
{
    global $wgOut;
    $return = $wgOut->parseInline($wikiText); //fails here
    echo json_encode($return);
}
?>

Когда я запускаю вызов jQuery через событие щелчка, я доходю до функции parseInline ().Глобальная переменная никогда не определяется в области видимости, и я получаю сообщение об ошибке:

Неустранимая ошибка : вызов функции-члена parseInline () для необъекта в /path/to/file/GeneralFunctions.php в строке 54

Я не уверен, как сделать вызов синтаксического анализа и определить глобальную переменную, когда AJAXвыполнен вызов?

UPDATE

$ wgOut - это объект OutputPage, связанный с MediaWiki.Он содержит весь HTML-код страницы и используется во всей среде MediaWiki для добавления контента на страницу или статью.Он используется на стороне сервера для создания персонализированного вывода для статей вики.Я использую его для создания форм или добавления HTML во многих наших вики.

Подробнее здесь: http://www.mediawiki.org/wiki/Manual:$wgOut

ОБНОВЛЕНИЕ 2

@ Джухана Я изменил свою функцию, чтобы посмотретькак это, что приводит к той же ошибке, что и раньше.Каждый эхо-сигнал выводит «NULL».

<?php
function jsonInlineParse($wikiText)
{
    include_once '/path/to/file/includes/OutputPage.php';
    include_once '/path/to/file/includes/parser/Parser.php';
    echo var_dump($wgOut);
    global $wgOut;
    echo var_dump($wgOut);

    $return = $wgOut->parseInline($wikiText);
    echo $return;
    echo json_encode($return);
}
?>

Ответы [ 2 ]

1 голос
/ 13 июня 2012

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

PHP

<code>function ajax_parse(){
        global $wgRequest;
        if($wgRequest->wasPosted()){
            $text = $wgRequest->getVal("text");
            wfDebug("Recieving::::".$text);
            if(!strpos($text, "href")){
                $text = myInlineParse($text);
                $text = str_replace("<pre>", "", $text);
                $text = str_replace("
"," ", $ text);} wfDebug (" Returning :::: ". $ Text); echo $ text;} exit;} функция myInlineParse ($ wikiText) {global $ wgOut; return $ wgOut-> parseInline ($ wikiText);}

JavaScript

// inject wikitext after hitting save
function postSave(o) {
var response = new Array("");
for(var i=0;i<o.row.length;i++){
     new Ajax.Request(wgScript +'/Special:EditClass/ajax_parse',
    {
        asynchronous: false,
        parameters: {'text': o.row[i].innerHTML},
        onSuccess: function(text){
            response.push(text.responseText);
        }
    }            
    );
}

return response;
}
0 голосов
/ 02 октября 2012

По каким-то причинам расширения не имеют доступа к $wgOut. Я решил это для своего расширения, используя хук: OutputPageParserOutput для кода, который мне нужен для вывода (мне нужно было внедрить некоторые скрипты и таблицы стилей, а также использовать другой хук для изменения ссылок, и я не хотел возиться с Resource_Loader, хотя это полезно и рекомендуется):

$wgHooks['OutputPageParserOutput'][] = array($this, 'doOutputPageParserOutput'); // 'doOutputPageParserOutput' defined as method in my class

Как и в случае с другими хуками, вы можете избавиться от массива в пользу только имени функции, если вы не хотите выполнять внутри класса.

...