2012-03-27 13 views
0

MediaWikiフレームワークでphp関数へのAJAX呼び出しを行うと、グローバル変数にアクセスする際に問題が発生しています。MediaWikiのjQuery.ajaxコールでグローバルPHP変数にアクセスできない

私のjQueryの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()関数グローバル変数がスコープで定義されていないと私はエラーを取得ん:

致命的なエラー/path/to/file/GeneralFunctions.phpに非オブジェクト上)(メンバ関数parseInlineに呼び出し私が解析コールを行い、AJAX呼び出しが行われたときにグローバル変数を定義するかどうかはわかりませんライン

UPDATE

$ wgOutは、MediaWikiのに関連付けられているOutputPageオブジェクトです。これはページのすべてのHTMLを保持し、MediaWikiフレームワーク全体を通してページまたは記事にコンテンツを追加するために使用されます。これは、サーバー側でwiki記事のカスタマイズされた出力を作成するために使用されます。私はそれを使ってフォームを作成したり、ウィキの多くにHTMLを追加したりします。ここ

詳細情報:http://www.mediawiki.org/wiki/Manual:$ wgOut

UPDATE 2

@Juhana私は前と同じエラーが発生している。このように見えるように私の機能を変更しました。各エコーは "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); 
} 
?> 
+1

これは '$ wgOut'とは何ですか? –

+0

どのような種類のオブジェクトですか?もっとコードを表示してください。 – Pete

+0

は、var_dump($ wgOut)の出力をポストします。 –

答えて

1

グローバル変数の問題が発生した後、私は別のアプローチをとっていました。私が作っていたAJAX呼び出しを変更し、以下のコードは私のためにうまく機能します。 hereという編集可能なjqueryテーブルを使用しています。 PHP

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("</pre>", "", $text); 
      } 
      wfDebug("Returning::::".$text); 
      echo $text; 
     } 
     exit; 
    } 

function 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

どんな理由から、拡張子が$wgOutへのアクセス権を持っていないようです。私はフックを使用して私の拡張のためにこれを解決しました:OutputPageParserOutput私は出力が必要なコードのために(私はいくつかのスクリプトやスタイルシートだけでなく、リンクを変更するために別のフックを使用する必要があったとResource_Loaderと気にしたくない)推奨:あなたは、クラス内で実行したくない場合は、他のフックと同様に

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

を、あなただけの関数名の賛成で配列を取り除くことができます。

関連する問題