Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript rails链接_,不使用ujs删除,仅使用jQuery_Javascript_Jquery_Ruby On Rails_Ajax - Fatal编程技术网

Javascript rails链接_,不使用ujs删除,仅使用jQuery

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 =

我正试图做jquery_ujs正在做的事情,但是没有ujs。我有一个链接应用程序,只有一个,它发布到一个销毁操作。我希望避免出于性能目的使用ujs。在使用ajax提交时单击链接时,我尝试使用jQuery生成表单。问题是,该操作会将浏览器重定向到注销。我可以很好地点击控制器,但在浏览器端什么也没发生。我知道button_也能解决这个问题,但我不能使用按钮。 为了清晰起见,我已经对表单数据进行了硬编码

$(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;
});