我不是 javascript 开发人员,所以请多多包涵...
我需要在 jQuery click 事件完成后执行重定向。这就是我所拥有的,但我无法将 .done 应用于 .click。将整个东西包装在 $.when 中是行不通的……
$("#printpng").click(function(){
$('#tool_docprops').click();
$('#tool_docprops_save').click();
$('#tool_export').click()
}).done(function(){
window.location.href = "<?php echo $base_url ?>/sign/print"
});
有没有人有更好的解决方案?
谢谢
最佳答案
假设每次点击都会触发一个不受您控制的 Ajax 调用(否则您为什么会遇到这个问题),您可以简单地等待任何/所有 Ajax 请求完成:
$(document).ajaxStop(function () {
window.location.href = "<?php echo $base_url ?>/sign/print"
});
如果需要,您还可以在更改 URL 之前添加超时,以防在 Ajax 加载后有其他处理。 如果这不是 Ajax 问题,请澄清,我会调整(或删除)这个答案。
完整版(在 Ajax 等待后有 1 秒的额外延迟)可能类似于:
$("#printpng").click(function(){
$('#tool_docprops').click();
$('#tool_docprops_save').click();
$('#tool_export').click();
$(document).ajaxStop(function () {
setTimeout(function(){
window.location.href = "<?php echo $base_url ?>/sign/print"
}, 1000);
});
});
由于从未提供完整的代码,解决方案是猜测,假设有多个 ajax 调用。
一个通用的解决方案是不触发点击事件,而是以 promise 友好的方式简单地为每次点击调用相关代码。
假设每个点击处理程序都有一个专用函数,只需让每个函数返回一个 promise 即可:
例如
function loadPropsViaAjax(){
// simply return the ajax call as $.ajax returns a promise
return $.ajax({parameters here});
}
function saveDocPropsViaAjax(){
// simply return the ajax call as $.ajax returns a promise
return $.ajax({parameters here});
}
function waitForImageToload(){
// create a deferred object
var def = $.Deferred();
// When the image eventually loads, resolve the promise
$('#someimageselector').on('load', function(){
def.resolve();
});
// Return the promise immediately
return def.promise();
}
然后在您的示例中使用它(使用 .then() 顺序运行):
// On click button event...
$("#printpng").click(function(){
// Run operations sequentially
loadPropsViaAjax().then(saveDocPropsViaAjax).then(waitForImageToload)
.done(function(){
window.location.href = "<?php echo $base_url ?>/sign/print"
});
});
或者如果它们可以并行运行,使用$.when:
// On click button event...
$("#printpng").click(function(){
// Run operations in parallel
$.when(loadPropsViaAjax, saveDocPropsViaAjax, waitForImageToload)
.done(function(){
window.location.href = "<?php echo $base_url ?>/sign/print"
});
});
关于javascript - JQuery .done 在点击事件上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21040672/
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).
我有一个电子邮件表格。但是我正在制作一个测试电子邮件表单,用户可以在其中添加一个唯一的电子邮件,并让电子邮件测试将其发送到该特定电子邮件。为了简单起见,我决定让测试电子邮件通过ajax执行,并将整个内容粘贴到另一个电子邮件表单中。我不知道如何将变量从我的HAML发送到我的Controllernew.html.haml-form_tagadmin_email_blast_pathdoSubject%br=text_field_tag'subject',:class=>"mass_email_subject"%brBody%br=text_area_tag'message','',:nam
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什
例如,假设我有一个名为Products的模型,并且在ProductsController中,我有以下代码用于product_listView以显示已排序的产品。@products=Product.order(params[:order_by])让我们想象一下,在product_listView中,用户可以使用下拉菜单按价格、评级、重量等进行排序。数据库中的产品不会经常更改。我很难理解的是,每次用户选择新的order_by过滤器时,rails是否必须查询,或者rails是否能够以某种方式缓存事件记录以在服务器端重新排序?有没有一种方法可以编写它,以便在用户排序时rails不会重新查询结果
我有一个将某些事件写入队列的Rails3应用。现在我想在服务器上创建一个服务,每x秒轮询一次队列,并按计划执行其他任务。除了创建ruby脚本并通过cron作业运行它之外,还有其他稳定的替代方案吗? 最佳答案 尽管启动基于Rails的持久任务是一种选择,但您可能希望查看更有序的系统,例如delayed_job或Starling管理您的工作量。我建议不要在cron中运行某些东西,因为启动整个Rails堆栈的开销可能很大。每隔几秒运行一次它是不切实际的,因为Rails上的启动时间通常为5-15秒,具体取决于您的硬件。不过,每天这样做几
我有一个帖子属于城市的关系,城市又属于一个州,例如:classPost现在我想找到所有帖子及其所属的城市和州。我编写了以下查询来获取带有城市的帖子,但不知道如何在同一查找器中获取带有城市的相应州:@post=Post.find:all,:include=>[:city]感谢任何帮助。谢谢。 最佳答案 Post.all(:include=>{:city=>:state}) 关于ruby-on-rails-使用Rails事件记录获取二级模型,我们在StackOverflow上找到一个类似的问
我想在每次访问url/code时运行一个脚本(code.rb)。如何运行脚本?require'sinatra'get'/'do#runthescriptend 最佳答案 要么fork另一个进程:system('rubycode.rb')...或者简单地将脚本加载到当前上下文中:load'code.rb'#*not*require 关于ruby-Sinatra:点击URL时运行ruby代码,我们在StackOverflow上找到一个类似的问题: https: