2013-04-05 6 views
0

Я искал несколько часов для решения этой проблемы. У меня есть стандартный компонент с контроллером, таким образом:Joomla 2.5 mootools ajax - Отправьте параметры компоненту

defined('_JEXEC') or die; 

jimport('joomla.application.component.controller'); 
jimport('joomla.environment.request'); 

class GetajaxController extends JController 
{ 
    function test() 
    { 
     $jinput = new JInput(); 
     $myvar = $jinput->getVar('eventname'); 
     print_r($_REQUEST); 
     $a = $_GET['eventname']; 
     $event = JRequest::getVar('eventname') ; 
     $client = JRequest::getVar('client') ; 
     echo "CLIENT:".$client." EVENT:".$event."*".$myvar; 
    } 
} 

(Я пытался несколько решений, поэтому есть дополнительная бессмыслица там, но уместный код все еще есть)

Я называю это из пользовательский модуль таким образом:

$urlA = "index.php?option=com_getajax&task=test&format=raw"; 
$document = JFactory::getDocument(); 
$document->addScriptDeclaration(" 

    function runButton() { 

     var data = 'eventname=aName&client=aClient'; 
     var url='$urlA'; 
     var request = new Request({ 
     url: url, 
     data: data, 
     method:'post', 
     onSuccess: function(responseText){ 
     document.getElementById('xml_result').innerHTML=responseText; 
     } 
     }).post('eventname=foo&client=baR'); // ORIGINALLY HAD IT AS JUST .post() 
     request.setHeader('eventname', 'sdfsdfsdf'); // ADDED 
    } 
"); 

ответ содержит обратно только жёстко «КЛИЕНТ: ... EVENT» минус переменные. Другими словами, я получаю ответ, и часть ajax/jquery из всего этого работает нормально, просто я не могу показаться, что жизнь меня успешно отправит параметры компоненту. (или, по крайней мере, получить их в компоненте)

Я обстрелял его, и они не находятся в ответе. Я даже закодировал код и использовал простой $ _GET в контроллере без успеха;

$urlA = "index.php?option=com_getajax&task=test&format=raw&event=foo&client=bar"; 

Я пробовал его с и без URL-адресов. И вы можете видеть из контроллера, что я пробовал различные методы для захвата прошедших параметров. Я также попробовал как «получить», так и «отправить».

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

  • В firebug есть параметр «x», показывающий, что я не посылаю, что кажется пустым. Не знаю, важно это или нет.

Любая помощь будет замечательной.

Спасибо заранее, Джефф

ответ

0

В случае, если кто считает, что это полезно, я в основном нужно разобрать его к основам, чтобы заставить его работать.

Это связано с большим количеством проб и ошибок, хотя я и не утверждаю, что все это понял.

Контроллер:

define('_JEXEC', 1); 

// need to get various libraries first for joomla specific controls 

jimport('joomla.application.component.controller'); 
jimport('joomla.environment.request'); 

// we extend JController 

class GetajaxController extends JController { 

    // the 'test' function will be a 'task' we can call in the url by the name 'test' 
    // (we can have many by simple defining new functions within our JController class) 

    function test() { 

     $app =& JFactory::getApplication(); 

     // get vars posted from module 

     $foo = JRequest::getVar('aVar'); 
     $bar = JRequest::getVar('bVar'); 
     $result = doSomethingWithThem($foo,$bar); 

     // encode result and send back. 
     // (using json encoding allows us multiple return variables. not used here.) 

     if($result) echo json_encode(array('test' => $result)); 

     // need to flush and close to prevent anything else but our data going back 

     $app->close(); 
     return; 
    } 
} 

// helper functions can be in the controller but not in the JController class 

function doSomethingWithThem($foo,$bar) { 
    return $foo . $bar; 
} 

Модуль:

define('_JEXEC', 1); 

// bring in mootools (which I'm not convinced is needed here, but it works so...) 

JHTML::_('behavior.mootools'); 
JHtml::_('behavior.framework', true); 

// add jscript to rendered page 

$document->addScriptDeclaration(" 

    // add a function to an element event (a button in this case) 
    jQuery('#btgetajax').live('click', function() { 

     var aVar = "Something"; 
     var bVar = "Something else"; 

     // actually call the ajax component. notice the task=test. 
     // format=raw further asks the component to only return our data 

     var url='index.php?option=com_getajax&task=test&format=raw'; 

     // json encode the data we're sending to the controller 

     var dat = {'aVar':aVar, 'bVar':bVar}; 

     // send it via ajax 

     jQuery.ajax({ 

     url: url, 
     method: 'post', 
     data: dat, 
     dataType:'json', 
     success: function(data) { 
      alert(data.test); 
     }, 
     error:function(xhr, status, data) { 
      alert(status); 
     } 

     }); 
    }); 
");