2012-03-27 7 views
0

내가 전역 변수에 접근 문제로 실행 해요에서 jQuery.ajax 호출에서 글로벌 PHP 변수에 액세스 할 수 없습니다.는 미디어 위키

내 jQuery를 AJAX 호출은 다음과 같습니다

내 GeneralFunctions.php 파일은 다음과 같습니다
jQuery.ajax({ 
    url: 'GeneralFunctions.php', 
    type: 'GET', 
    dataType: 'json', 
    data: { 
     text: anchorText 
    }, 
    success: function (data) { 
     alert("data: " + data); 
    } 
}); 

: 나는 클릭 이벤트를 통해 jQuery를 호출을 실행하면

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

내가 멀리로 얻을 parseInline() 함수. 글로벌 변수는 범위에 정의되지 나는 오류 얻을 않습니다 :

치명적인 오류 : 에 비 객체() 멤버 함수의 parseInline에 전화 /path/to/file/GeneralFunctions.php을 54

나는 AJAX 호출이 수행 될 때 전역 변수를 구문 분석 호출을하고 정의하는 방법을 잘 모르겠어요 라인 ?

UPDATE

$ wgOut는 미디어 위키와 관련된 OutputPage 개체입니다. 그것은 페이지의 모든 HTML을 보유하고 MediaWiki 프레임 워크 전체에서 페이지 나 기사에 내용을 추가하는 데 사용됩니다. 이것은 서버 측에서 wiki 기사에 대한 사용자 정의 출력을 작성하는 데 사용됩니다. 나는 위키의 많은 부분에 HTML을 추가하거나 폼을 만들 때 사용합니다. 여기

상세 정보 : http://www.mediawiki.org/wiki/Manual : $ wgOut

업데이트 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); 
} 

자바 스크립트

// 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에 액세스 할 권한이없는 것 같습니다. 내가 후크를 사용하여 내 연장이 해결 : (I 링크를 수정하는 또 다른 후크를 사용하여뿐만 아니라 일부 스크립트와 스타일 시트를 주입하는 데 필요한 I 출력을 필요로하는 코드 OutputPageParserOutput를하고 유용하지만 Resource_Loader 귀찮게하지 않았고,) 추천 : 당신은 클래스 내에서 실행하지 않으려는 경우

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

다른 후크와 마찬가지로, 당신은 단지 함수 이름에 찬성 배열을 제거 얻을 수 있습니다.

관련 문제