2011-12-26 3 views
1

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

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

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

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

<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, связанный с кнопкой (рычажного с уникальным идентификатором).

Я не могу понять, почему в сгенерированных страницах я получил нулевой вместо идентификатора и 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

ответ

1

ахи, вы путаете JavaScript и GSP. Я делал это много раз, это может быть сложно обнаружить!

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

Unfortunatly обходной путь не просто поскольку 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

Спасибо! Он делает то, что мне нужно сейчас. –

0

заменить 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){}}); 

где данные параметры, Адрес страницы/URL/контроллер/функция и DIVID это имя DIV для обновления

Смежные вопросы