Грааль; remoteFunction с динамическим обновлением, вызывает нулевое значение на HTML-странице - PullRequest
1 голос
/ 26 декабря 2011

У меня проблема с использованием компонента remoteFunction в функции скрипта java; Я использую Grails 1.3.7.

У меня есть несколько div на странице, которые содержат div, который я хочу обновить. Каждый div, который я хочу обновить, имеет свой собственный идентификатор (fullUrlSaProfilDivX), где X - это уникальный идентификатор на странице.

Я хочу обновить два div (один за другим).

Я создал функцию сценария Java:

<g:javascript>
function removeSelectedProfilAssoc(urlSaId, profilAssocId) {
    ${ remoteFunction (action:"delete", update:'fullUrlSaProfilDiv'+urlSaId, controller:"profilAssoc", params:'\'id=\'+profilAssocId', options:[asynchronous:false]) };
    ${ remoteFunction (action:"listUrlSaProfil", controller:"profilAssoc", update:'lightUrlSaProfilDiv'+urlSaId, params:'\'urlSa.id=\'+urlSaId') };
};
</g:javascript>

Вызывается по ссылке:

<a href="javascript:void(0)" class="icons_delete" onclick="removeSelectedProfilAssoc(${profilAssocInstance?.urlSa?.id}, ${profilAssocInstance?.id})"></a>

Я хочу обновить div, связанный с кнопкой (связь с уникальным идентификатором).

Я не могу понять, почему на сгенерированной странице вместо идентификатора я получил null, а div не обновляется:

function removeSelectedProfilAssoc(urlSaId, profilAssocId) {
    new Ajax.Updater('fullUrlSaProfilDivnull','/_Pong2WAR/profilAssoc/delete',{asynchronous:false,evalScripts:true,parameters:'id='+profilAssocId});;
    new Ajax.Updater('lightUrlSaProfilDivnull','/_Pong2WAR/profilAssoc/listUrlSaProfil',{asynchronous:true,evalScripts:true,parameters:'urlSa.id='+urlSaId});;
};

Я что-то не так делаю? Как я могу передать идентификатор div, который я хочу обновить, и добавить его обновленным?

Спасибо, что посмотрели!

Benjamin

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

ахах, вы смешиваете javascript и gsp. Я также делал это много раз, это может быть сложно выяснить!

В вашем случае urlSaId - это javascript var, но вы используете его в вызове функции GSP , так что будет null ....

К сожалению, обходной путь не простой, так как функция remoteFunction не позволит вам правильно объединить переменную javascript в обновлении, поскольку вы хотите:

new Ajax.Updater('fullUrlSaProfilDiv'+urlSaId,'/_Pong2WAR/profilAssoc/delete',{asynchronous:false,evalScripts:true,parameters:'id='+profilAssocId});

Что я предлагаю, так это создать Ajax.Updater(..) без использования функции remoteFunction (или чего-то подобного):

<g:javascript>
  function removeSelectedProfilAssoc(urlSaId, profilAssocId) {
    new Ajax.Updater('fullUrlSaProfilDiv'+urlSaId,'${createLink(action:"delete", controller:"profilAssoc")}',{asynchronous:false,evalScripts:true,parameters:'id='+profilAssocId});
    new Ajax.Updater('lightUrlSaProfilDiv'+urlSaId,'${createLink(action:"listUrlSaProfil", controller:"profilAssoc")}',{asynchronous:true,evalScripts:true,parameters:'urlSa.id='+urlSaId});;
  };
</g:javascript>

Кстати, я всегда использую вместо этого jquery, это упрощает все Ajax в вашем GSP.

0 голосов
/ 19 февраля 2015

заменить функцию remoteFunction на

 jQuery.ajax({
     type:'POST',
     data:'territorio='+territorio_id+'&anho='+anho+'&id='+firstIndicador+'&div='+divId+'&divmap='+divmap, 
     url:'/observatoriograils/eje/indGeneralporAnhoyTerritorio',
     success:function(data,textStatus){jQuery('#'+divId).html(data);},
     error:function(XMLHttpRequest,textStatus,errorThrown){}}); 

где data - параметры, url - это / url / controller / function, а divId - это имя div для обновления

...