내 데이터베이스에 위젯을 삽입하라는 Ajax POST 요청을하는 양식이 있습니다. 양식에는 위젯에서 선택할 수있는 선택 상자가 있습니다. DB 삽입이 완료되면 선택 상자를 업데이트해야합니다. 사실 지금은 전체 양식을 대체합니다.AJAX onComplete 이벤트가 호출되기 전에 페이지의 Javascript가 실행되지 않습니다.
선택 상자에 위젯이 있기 때문에 자바 스크립트에 개체 복사본이 있어야합니다. 나는이 변수를 widget_objects라고 부른다. 업데이트 이벤트 중에 폼이 바뀌면 ruby 변수 < % = @widget_objects %>를 출력하고 새로 생성 된 객체를 볼 수 있습니다. 그러나 onComplete 이벤트에서 javascript var "widget_objects"에 액세스하려고하면 새 객체가 존재하지 않습니다. 페이지에서이 코드 줄을 사용하여 javascript widget_objects를 만듭니다. widget_objects = < % = @widget_objects %>;
위의 코드 줄은 Ajax 요청의 onComplete 이벤트 전에 실행되지 않습니다. 그러나, 나는 oncomplete 이벤트가 페이지가로드 된 후에 발생한다고 생각하고, 스크립트가 eval 된 것이라고 가정합니다 .... 어떤 아이디어입니까?
<%= 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');"
}) %>