我有一个表单,它使得一个Ajax POST请求插入一个小部件到我的数据库中。在表单中,我有一个选择框,您可以从小部件中进行选择。数据库插入后,我必须更新选择框。我现在只是替换整个表单。在AJAX onComplete事件被调用之前,页面上的Javascript没有执行
因为选择框有小部件,所以我必须在javascript中有一个对象的副本。我称这个var widget_objects。在更新事件期间替换表单时,我打印ruby变量<%= @widget_objects%>,我可以看到新创建的对象。但是,当我尝试访问onComplete事件中的javascript var“widget_objects”时,新对象不存在。我在页面上用这行代码创建javascript widget_objects: widget_objects = <%= @widget_objects%>;
因此,似乎上面的代码行不会在Ajax请求的onComplete事件之前执行。然而,我认为onComplete事件发生在页面加载后,我会假设在脚本被评估之后......任何想法?
<%= 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');"
}) %>