J'ai un formulaire qui fait une requête Ajax POST pour insérer un widget dans ma base de données. Dans le formulaire, j'ai une boîte de sélection où vous pouvez choisir parmi les widgets. Après l'insertion db est faite, je dois mettre à jour la boîte de sélection. En fait, je remplace juste le formulaire entier pour l'instant. Puisque la boîte de sélection a les widgets, je dois avoir une copie des objets dans javascript. J'appelle ça var widget_objects. Lorsque le formulaire est remplacé lors de l'événement de mise à jour, j'imprime la variable ruby <% = @widget_objects%> et je peux voir l'objet nouvellement créé. Cependant, lorsque j'essaie d'accéder à la variable javascript var "widget_objects" dans l'événement onComplete, le nouvel objet n'existe pas. Je crée le widget_objects javascript avec cette ligne de code sur la page: widget_objects = <% = @widget_objects%>;Javascript sur la page ne s'exécute pas avant que l'événement AJAX onComplete soit appelé
Il semble donc que la ligne de code ci-dessus n'est pas exécutée avant l'événement onComplete de la requête Ajax. Cependant, je pensais que l'événement onComplete se produisait après que la page ait été chargée, et je suppose que les scripts sont évalués ... des idées?
<%= submit_to_remote(
"save_widget",
"Save Widget & Generate Embed Code",
{
:url => widgets_url(:user_id => @user.id),
:update => "widget_form",
:method => :POST,
:html => { :id => "save_widget_button",
:onclick => "this.value='Saving...'; this.disabled = 'true';",
:style => "width: 220px;"
},
:complete =>"
$('save_widget_button').disabled='';
$('save_widget_button').value='Save Widget & Generate Embed Code';
var last_id = $j('select#widget_id').children(':last').attr('value');
alert(widget_objects[last_id]);
",
:success => "reportMessage('success', request.headerJSON.success, 'save_widget_status'); $('band_form').reset();",
:failure => "reportMessage('failure', request.headerJSON.errors, 'save_widget_status');"
}) %>