2017-11-16 3 views
1

私は概念的な理解の欠如に起因すると思うJavaScriptの問題に苦しんでいます。私はすぐにダイビングします:一見無関係のリターン関数なしではJavaScriptのダウンロードは機能しません

ボタンをクリックしたときにファイルをダウンロードしたいウェブページがあります。関連するhtml jsは次のとおりです。

// Js within html 
var mypage = new MyPage(); 

$(document).ready(function() { 
    mypage.onReady(); 
}); 

document.readyは確実に動作しているボタンプッシュで実行されます。次に、私のMyPage.jsファイル:

onReady() { 
    $('.my-form').on('submit', function() { 
    $.ajax({ 
     type: 'GET', 
     url: '/my/url', 
     data: { 
     'data': JSON.stringify(my_data) 
     } 
    }).done((response) => { 
     window.location.href = response.msg; 
    }).fail(function(data) { 
     console.log(data) 
    }); 
    return false; //relevant line 
    }); 
} 

戻り値false lineは無関係です。しかし、何らかの理由で私がそれを取り出すとダウンロードが失敗し、それが成功する。誰かがなぜ私に説明することができますか?それが必要な場合は、より多くの情報を投稿して幸せ。 the documentationによると

+2

フォームを送信していないので、そこにあります...あなたの初期の機能はどれですか。あなたは代わりにajaxを使用しているので、 "submit"が起こるのを止めています。 – Zak

+1

http://api.jquery.com/on/#event-handler – Phil

答えて

1
$('.my-form').on('submit', function() { 

それはあなただけのページ単にフォームまたはを提出しており、それによってページがすぐにボタンをクリックするように更新され、意図的にオトされていないかどうか。

return falseを追加すると、フォームまたはページの送信が妨げられ、AJAXコールが終了し、window.location.hrefリダイレクトが通過することが防止されます。

2

:イベントハンドラからfalseを返す

は自動的に event.stopPropagation()event.preventDefault()を呼び出します。

関連する問題