邮寄后防止重定向

问一个已经多次回答多次的问题可能是一个坏主意,但无论如何我都应该问它。 我尝试了很多我在那里发现的所有内容在提交表单后防止重定向但没有任何帮助我。 有一些细节,我看不到。 我对jQuery和AJAX不太熟悉。 特别是前者。 所以,代码:





Select a file


有我的JS

 function sendData() { var file_data = $("#fileToUpload").prop("files"); console.log(file_data); if ($("#file_data").val() != "") { var form_data = new FormData(); //form_data.append('file', file_data); //console.log(file); form_data.append('file', file_data); console.log(form_data); $.ajax({ url: 'uploadfile.php', // point to server-side PHP script dataType: 'text', // what to expect back from the PHP script, if anything cache: false, contentType: false, processData: false, data: form_data, type: 'post', success: function(data) { // get server responce here //alert(data); // clear file field //$("#your-files").val(""); return false; } }); return false; //event.preventDefault(); } else { alert("Please select file!"); } } 

所以,这是有问题的代码。 除重定向外,所有工作都完美无瑕。 另一个问题包含提交,但我没有提交输入。 我试图从post方法(第1行)中删除表单,但我收到了服务器错误。 到处都是假的。 我在这个问题上花了无数个小时,它几乎耗尽了我几个晚上的几个小时。 我要感谢任何帮助,谢谢。

防止表单提交的技巧是return false onsubmit,如下所示:

 




Select a file


请注意,我已经写了onsubmit=return sendData() 。 当sendData()返回true ,表单将被提交,否则将永远不会被提交。 为此, sendData()中的最后一个语句return false; 。 这样,表单永远不会在当前窗口中提交,而只是Ajax提交工作。

 function sendData() { var file_data = $("#fileToUpload").prop("files"); console.log(file_data); if ($("#file_data").val()) { var form_data = new FormData(); //form_data.append('file', file_data); //console.log(file); form_data.append('file', file_data); console.log(form_data); $.ajax({ url: 'uploadfile.php', // point to server-side PHP script dataType: 'text', // what to expect back from the PHP script, if anything cache: false, contentType: false, processData: false, data: form_data, type: 'post', success: function(data) { // get server responce here //alert(data); // clear file field //$("#your-files").val(""); } }); } else { alert("Please select file!"); } return false; } 

我希望这能让你清楚地了解。

您希望取消按钮触发的提交事件的默认事件处理程序。 要执行此操作,您需要访问事件本身。 最好从JavaScript完全处理按钮单击,而不是从HTML调用函数。

 var submitButton = document.getElementById('btnSubmit'); submitButton.addEventListener('click', sendData); // Then you will have access to the event in the sendData function function sendData(ev) { ev.preventDefault(); ... } 

实例

稍微更清晰的方法是处理表单提交,但是这样做了。 例如,这也可以通过按Enter键来捕获表单。

 var form = document.getElementById('form'); form.addEventListener('submit', sendData); 

实例

在函数sendData()中,您应该像这样传递事件参数

  function sendData(evt) { } 

然后在这个函数中我们应该添加evt.preventDefault(); 停止提交动作。 希望这有帮助。

使用button的值添加type属性,您就完成了:

 

默认情况下,type属性的值为submit ,它告诉浏览器将from提交给服务器,如果将其更改为button则浏览器将不执行任何操作,只能在单击按钮时绑定事件