Ruby on rails 在调用AJAX onComplete事件之前,页面上的Javascript未执行

Ruby on rails 在调用AJAX onComplete事件之前,页面上的Javascript未执行,ruby-on-rails,ruby,ajax,prototypejs,Ruby On Rails,Ruby,Ajax,Prototypejs,我有一个表单,它发出一个Ajax POST请求,向我的数据库中插入一个小部件。在表单中,我有一个选择框,您可以在其中从小部件中进行选择。在插入db之后,我必须更新选择框。实际上我现在只是替换整个表单 因为选择框有小部件,所以我必须有javascript中对象的副本。我称之为var-widget\u-objects。在更新事件期间,当表单被替换时,我打印ruby变量,并且可以看到新创建的对象。但是,当我尝试在onComplete事件中访问javascript var widget_对象时,新对象不

我有一个表单,它发出一个Ajax POST请求,向我的数据库中插入一个小部件。在表单中,我有一个选择框,您可以在其中从小部件中进行选择。在插入db之后,我必须更新选择框。实际上我现在只是替换整个表单

因为选择框有小部件,所以我必须有javascript中对象的副本。我称之为var-widget\u-objects。在更新事件期间,当表单被替换时,我打印ruby变量,并且可以看到新创建的对象。但是,当我尝试在onComplete事件中访问javascript var widget_对象时,新对象不存在。我使用页面上的以下代码行创建javascript小部件_对象: 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');"
                    }) %>

将evalscript设置为true必须有效

否则,您可以尝试使用加载脚本

> <script> function window.onload(){
> alert('I am loaded as the page
> completes loading') } </script>

如果这没有帮助,那么您可以调用函数:在收到响应时加载ajax调用,函数将被调用。

将evalscript设置为true必须起作用

否则,您可以尝试使用加载脚本

> <script> function window.onload(){
> alert('I am loaded as the page
> completes loading') } </script>

如果这没有帮助,那么您可以调用函数:在收到响应时加载ajax调用,函数将被调用。

我的PHP脚本中也发生了类似的情况,脚本的时间似乎不同步。更多的是关于ajax调用之后出现的代码如何在onSuccess事件中的代码之前执行,解决方案是将整个事件响应代码封装在匿名函数中,如下所示:

onSuccess: function(reply)
{
    resp = reply.reponseText();
    pieces = resp.split('|');
    (...etc...)
}

您可以在:完整标识符之后尝试类似的操作。希望这有帮助

我的PHP脚本中发生了类似的事情,脚本的时间似乎不同步。更多的是关于ajax调用之后出现的代码如何在onSuccess事件中的代码之前执行,解决方案是将整个事件响应代码封装在匿名函数中,如下所示:

onSuccess: function(reply)
{
    resp = reply.reponseText();
    pieces = resp.split('|');
    (...etc...)
}

您可以在:完整标识符之后尝试类似的操作。希望这有帮助

处理此类问题时,请使用Firefox的JS调试器安装Firebug插件,从“脚本”选项卡启用自动中断异常,然后重新加载页面。如果Firefox截获异常,例如来自响应rjs的异常,则修复该异常。您可能还希望只围绕RJ:使用“try{…}catch{alerte}”JS包装器完成代码


接下来,使用JS调试器在prototype.JS的respondToReadyState方法中设置断点,您可以在其中检查来自应用程序的rjs回复并逐步执行evalResponse方法。您将很快缩小范围。

在处理此类问题时,请使用Firefox的JS调试器安装Firebug插件,从“脚本”选项卡启用自动中断异常,然后重新加载页面。如果Firefox截获异常,例如来自响应rjs的异常,则修复该异常。您可能还希望只围绕RJ:使用“try{…}catch{alerte}”JS包装器完成代码

接下来,使用JS调试器在prototype.JS的respondToReadyState方法中设置断点,您可以在其中检查来自应用程序的rjs回复并逐步执行evalResponse方法。你会很快缩小范围的