[Решено]Из JS в модуль!

Главные вкладки

Аватар пользователя m.rad m.rad 16 мая 2011 в 11:40

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

Есть модуль. В нем я подключаю свой JS файл (здесь проблем нет, файл подключается, работает), который должен парсить таблицу на странице и отдавать значения обратно в модуль и там дальше с этими данными творю че хочу. Так вот отдать данные то как раз и не получается. Подскажите кто как может...

делаю так:

Код модуля (только ключевые моменты):

<?php
function prof_menu() {
      
$items = array();
 
      
$items['prof/prof_nodeviewform_save'] = array(
            
'page callback' => 'prof_nodeviewform_save',
            
'access arguments' => array('access content'),
            
'type' => MENU_CALLBACK,
      );
 
      return 
$items;
}

...

function 

prof_nodeviewform_save ($form, &$form_state) {
...
$objPHPExcel->setActiveSheetIndex(0)
            ->
setCellValue('A1'$_GET['gotov']) // собственно так я не получаю нужные мне данные 
...    
}
?>

Код JS (К примеру хочу передать число 15 в модуль):

...
        var gotov = 15;
                $.ajax({
                        type: "GET",
                        url: 'prof/prof_nodeviewform_save',
                        data: gotov,
                });
...

Комментарии

Аватар пользователя Alex Bacart Alex Bacart 16 мая 2011 в 12:06

Подписываюсь!

Могу предположить, что 'access arguments' => array('access content') не пропускает JS, попробуйте поставить TRUE, а в prof_nodeviewform_save проверять кто пишет.

Аватар пользователя phpandrei phpandrei 16 мая 2011 в 12:24

а если так попробовать в жаваскрипте(на подобии делал, щас точно не скажу): $get('prof/prof_nodeviewform_save',{gotov: "15"}, null);
если это код у вас рабочий, то подозрительно по мне : data: gotov, а $_GET['gotov'], мож $_GET['data']

Аватар пользователя m.rad m.rad 16 мая 2011 в 12:40

"phpandrei" wrote:
подозрительно по мне : data: gotov, а $_GET['gotov'], мож $_GET['data']

согласен, должно быть data: {gotov:gotov}
но по прежнему то что нужно не работает

"Vydrin_AP" wrote:
Так с TRUE я угадал?

а ХЗ Smile

Аватар пользователя Alex Bacart Alex Bacart 16 мая 2011 в 12:41

Кстати, можно даже проще делать, передавать сначала id пользователя в JS через Drupal.settings, а потом тем же $.ajax в prof_nodeviewform_save.

Аватар пользователя phpandrei phpandrei 16 мая 2011 в 12:53

вообще заголовок правльно уходит? в жуке проверяли? У вас какой адрес? Просто если а локальном тестите и локалхост прописан в начале могут быть проблемы. Введите $get('prof/prof_nodeviewform_save',{gotov: "15"}, null); с полным адресом с http и прочей ерундой

Аватар пользователя Alex Bacart Alex Bacart 16 мая 2011 в 12:59

"m.rad" wrote:

так поставив тру мы же полностью разрешаем передачу аргументов

Да! Но это не страшно, если потом будем проверять кто пишет.

"phpandrei" wrote:
вообще заголовок правльно уходит? в жуке проверяли? У вас какой адрес? Просто если а локальном тестите и локалхост прописан в начале могут быть проблемы. Введите $get('prof/prof_nodeviewform_save',{gotov: "15"}, null); с полным адресом с http и прочей ерундой

Вроде так это делается программно:
<?php url('prof/prof_nodeviewform_save', array('absolute' => TRUE)) ?>

Аватар пользователя Alex Bacart Alex Bacart 16 мая 2011 в 13:01

"m.rad" wrote:
так поставив тру мы же полностью разрешаем передачу аргументов

Именно поэтому надо передавать не uid, а session_id(). Признаю - ошибался )

Аватар пользователя sas@drupal.org sas@drupal.org 16 мая 2011 в 13:05

У меня работало вот так:

data = {'js_replace':replace, 'js_delta':idname};
$(replace).load(url + query + ' ' + replace + ' > *', data, function(response, status, xhr){
 if(status != 'error'){  
  afterLoadEvent(replace);  
 }
});
Аватар пользователя phpandrei phpandrei 16 мая 2011 в 13:08

я по хлоду недопонимаю чегото:
$items['my_ajax'] = array
(
'title' => 'output',
'page callback' => 'my_ajax_get_form',
'access arguments' => array('myajax'),
'type' => MENU_CALLBACK,
);
это я в меню колбаке пишу

а вот это функция
function my_ajax_get_form()
{
return $_GET['aaa'];
}

а это в скрипте
$.get('http://my.sait/my_ajax', {aaa:"15"},null);

прям с рабочего кода взято(когда этого зверя учил)

Аватар пользователя m.rad m.rad 16 мая 2011 в 13:39

я чет тоже не понимаю, может вы свежим глазом найдете ошибку

prof.module


<?php
// $Id$ 

function prof_perm() {
return array(
'access prof content''administer prof');
}

function 

prof_menu() {
      
$items = array();
 
      
$items['prof'] = array(
            
'page callback' => 'prof_nodeviewform_save',
            
'access arguments' => TRUE,
            
'type' => MENU_CALLBACK,
      );
    
      return 
$items;
}

function 

prof_nodeapi(&$node$op$teaser$page) {  // -----------Цепляем кнопки к типу декларация
  
switch ($op) {
    case 
'view':
      if (
$node->type == "deklaration") {
          
drupal_add_js(drupal_get_path('module','prof').'/prof.js');
        
$node->content['prof_items'] = array(
          
'#value' => drupal_get_form('prof_nodeviewform'$node),
          
'#weight' => 100,
        );
      }
      break;
  }
}

function 

prof_nodeviewform($form_state$node) { // -----------------ФОРМИРОВАНИЕ КНОПОК
  
$form['save'] = array(
    
'#type' => 'submit',
    
'#value' => 'Сохранить',
    
'#attributes' => array(
      
'class' => 'save',
    ),
    
'#validate' => array('prof_nodeviewform_save'),
  );
  
$form['submit'] = array(
    
'#type' => 'submit',
    
'#value' => 'Отправить',
    
'#attributes' => array(
      
'class' => 'send',
    ),
  );
  
$form['nodenid'] = array(  // -------------------Скрытое поле для передачи ид ноды
    
'#type' => 'hidden',
    
'#value' => $node->nid
  
);
  return 
$form;
}

function 

prof_nodeviewform_submit($form, &$form_state) {  // -----Событие на отправить
}

function 

prof_nodeviewform_save ($form, &$form_state) {   // ----------Событие на сохранить

echo 'значение'.$_GET['gotov'];

}

?>

prof.js

Drupal.behaviors.prof = function(context) {
               
        $.get('http://localhost/prof.ru/prof',{gotov: "15"}, null);

}

Аватар пользователя phpandrei phpandrei 16 мая 2011 в 13:51

хрен знает. http://lemon-computing.livejournal.com/1445.html - чисто учебный и рабочий пример, с адресами только смотрите аккуратнее создаёте модуль с именами и кодом как в примере. не заработает - мож jquery или ещё чего нет

Аватар пользователя phpandrei phpandrei 16 мая 2011 в 14:08

и сам jquery работает? из за денвера думаю врят ли. а если в фаербаге посмотреть парамеры правилно передаются?. Если не выйдет, пример простой какойнить кину попозже.

Аватар пользователя m.rad m.rad 16 мая 2011 в 14:39

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

Аватар пользователя phpandrei phpandrei 16 мая 2011 в 14:44

просто вкладка консоль. обновляеш страницу и там будет выполняться get передача - то есть по сути просто ссылка на функцию но с параметром, то есть что то типа http://localhost/prof.ru/prof?gotov=15
если брать гетом, то там так же можно посмотреть что возвращается

Аватар пользователя m.rad m.rad 16 мая 2011 в 15:08

странное дело

$(document).ready(function() {

        $('#edit-save').click(function() {
        alert('скрипт норм');
        $.get('/prof.ru/prof', {gotov:"15"},null);
        return false;          
        });
});

если ретерн фолс, то судя по фаербагу все отправляется, и возвращается то что нужно.
но ставлю ретерн тру - ошибка, ниче не отправляется, но мне надо чтобы по нажатию на кнопку после выполнения js скрипта продолжился выполняться пхп скрипт.

Аватар пользователя Orion76 Orion76 16 мая 2011 в 16:59

А вместо сохранения значения в $_GET['gotov'].. если добавить hidden-элемент на форму для хранения значения, заполнять его значение ява-скриптом а потом брать из form_state['values']['элемент']?

Аватар пользователя phpandrei phpandrei 17 мая 2011 в 10:55

давайте мыло - модуль вышлю 100% рабочий и элементарный - выводит блок(сами регион укажите) с кнопкой. - после нажатия записывает данные в переменную

Аватар пользователя RoSk0 RoSk0 17 мая 2011 в 11:18

2phpandrei может лучше на файлообменник какой? и вам не так напряжно всем желающим отправлять и народ свободно потянет