Ruby on rails 在调用AJAX onComplete事件之前,页面上的Javascript未执行
我有一个表单,它发出一个Ajax POST请求,向我的数据库中插入一个小部件。在表单中,我有一个选择框,您可以在其中从小部件中进行选择。在插入db之后,我必须更新选择框。实际上我现在只是替换整个表单 因为选择框有小部件,所以我必须有javascript中对象的副本。我称之为var-widget\u-objects。在更新事件期间,当表单被替换时,我打印ruby变量,并且可以看到新创建的对象。但是,当我尝试在onComplete事件中访问javascript var widget_对象时,新对象不存在。我使用页面上的以下代码行创建javascript小部件_对象: widget_objects= 因此,上面的代码行似乎没有在Ajax请求的onComplete事件之前执行。然而,我认为onComplete事件发生在页面加载之后,我会假设在脚本被评估之后……有什么想法吗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_对象时,新对象不
<%= 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方法。你会很快缩小范围的