Javascript rails链接_,不使用ujs删除,仅使用jQuery
我正试图做jquery_ujs正在做的事情,但是没有ujs。我有一个链接应用程序,只有一个,它发布到一个销毁操作。我希望避免出于性能目的使用ujs。在使用ajax提交时单击链接时,我尝试使用jQuery生成表单。问题是,该操作会将浏览器重定向到注销。我可以很好地点击控制器,但在浏览器端什么也没发生。我知道button_也能解决这个问题,但我不能使用按钮。 为了清晰起见,我已经对表单数据进行了硬编码Javascript rails链接_,不使用ujs删除,仅使用jQuery,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,我正试图做jquery_ujs正在做的事情,但是没有ujs。我有一个链接应用程序,只有一个,它发布到一个销毁操作。我希望避免出于性能目的使用ujs。在使用ajax提交时单击链接时,我尝试使用jQuery生成表单。问题是,该操作会将浏览器重定向到注销。我可以很好地点击控制器,但在浏览器端什么也没发生。我知道button_也能解决这个问题,但我不能使用按钮。 为了清晰起见,我已经对表单数据进行了硬编码 $(document).ready(function() { var csrf_token =
$(document).ready(function() {
var csrf_token = $('meta[name=csrf-token]').attr('content');
var form = $("<form action='/app/logout' class='logout-form' method='post' accept-charset='UTF-8'></form>")
var input1 = $("<input name=_method' type='hidden' value='delete'>")
var input2 = $("<input name=authenticity_token' type='hidden'>").val(csrf_token)
form.hide().append(input1)
form.submit(logout)
$("a[data-method]").click(function(event){
event.preventDefault()
form.submit()
})
function logout(event) {
$.ajax({
url: '/app/logout',
type: 'POST',
data: {_method:"delete", authenticity_token: csrf_token, action: "destroy", controller: "internal/logins" }
})
event.preventDefault()
}
});
重定向到其他站点的销毁操作的ajax帖子会导致CORS错误。解决方案是构造一个表单,就像button_所做的一样,只需使用jQuerySubmit即可
var link = $("a[data-method]");
function submitForm(){
var csrfToken = $('meta[name=csrf-token]').attr('content');
var csrfParam = $('meta[name=csrf-param]').attr('content');
var form = $('<form method="post" action="' + link.attr('href') + '" type="hidden" class="logout-form"</form>');
var metadataInput = '<input name="_method" value="' + link.data('method') + '" type="hidden" />';
metadataInput += '<input name="' + csrfParam + '" value="' + csrfToken + '" type="hidden" />';
form.append(metadataInput).appendTo('body');
form.submit()
}
link.click(function(event) {
event.preventDefault();
submitForm()
});
我无法发表评论,但第一个答案是正确的,但有一个错误:
submitForm
中使用的链接将仅是第一个匹配的链接。以下是我的版本:
$('a[data-method]').click(function() {
var $link = $(this);
var csrfToken = $('meta[name=csrf-token]').attr('content');
var csrfParam = $('meta[name=csrf-param]').attr('content');
var $form = $('<form method="post" action="' + $link.attr('href') + '" class="u-hiddenVisually"></form>');
var metadataInput = '<input name="_method" value="' + $link.data('method') + '" type="hidden" />';
metadataInput += '<input name="' + csrfParam + '" value="' + csrfToken + '" type="hidden" />';
$form.append(metadataInput).appendTo('body');
$form.submit();
return false;
});
$('a[数据方法])。单击(函数(){
var$link=$(此);
var csrfToken=$('meta[name=csrf-token]')。attr('content');
var csrfParam=$('meta[name=csrfParam]').attr('content');
变量$form=$('');
变量metadataInput='';
metadataInput+='';
$form.append(metadataInput).appendTo('body');
$form.submit();
返回false;
});
将类:“u-hiddenVisualize”
替换为用于隐藏表单的任何内容
link_to("Logout", logout_path, :method => :delete, class: 'logout')
$('a[data-method]').click(function() {
var $link = $(this);
var csrfToken = $('meta[name=csrf-token]').attr('content');
var csrfParam = $('meta[name=csrf-param]').attr('content');
var $form = $('<form method="post" action="' + $link.attr('href') + '" class="u-hiddenVisually"></form>');
var metadataInput = '<input name="_method" value="' + $link.data('method') + '" type="hidden" />';
metadataInput += '<input name="' + csrfParam + '" value="' + csrfToken + '" type="hidden" />';
$form.append(metadataInput).appendTo('body');
$form.submit();
return false;
});