Pilihan lain ialah menggunakan iframe dan tetapkan sasaran borang padanya.
Anda boleh mencuba ini (ia menggunakan jQuery):
function ajax_form($form, on_complete) { var iframe; if (!$form.attr('target')) { //為表單創(chuàng)建一個(gè)唯一的iframe iframe = $("<iframe></iframe>").attr('name', 'ajax_form_' + Math.floor(Math.random() * 999999)).hide().appendTo($('body')); $form.attr('target', iframe.attr('name')); } if (on_complete) { iframe = iframe || $('iframe[name="' + $form.attr('target') + '"]'); iframe.load(function () { //獲取服務(wù)器響應(yīng) var response = iframe.contents().find('body').text(); on_complete(response); }); } }
Ia berfungsi dalam semua penyemak imbas dan anda tidak perlu membuat siri atau menyediakan data. Satu kelemahan ialah anda tidak boleh memantau kemajuan.
Selain itu, sekurang-kurangnya untuk Chrome, permintaan itu tidak muncul di bawah tab "xhr" dalam alat pembangun, tetapi di bawah "doc".
Masalah yang saya hadapi ialah menggunakan pengecam jQuery yang salah.
Anda boleh menggunakan borang menggunakan ajax untuk memuat naik data dan fail.
PHP + HTML
<?php print_r($_POST); print_r($_FILES); ?> <form id="data" method="post" enctype="multipart/form-data"> <input type="text" name="first" value="Bob" /> <input type="text" name="middle" value="James" /> <input type="text" name="last" value="Smith" /> <input name="image" type="file" /> <button>提交</button> </form>
jQuery + Ajax
$("form#data").submit(function(e) { e.preventDefault(); var formData = new FormData(this); $.ajax({ url: window.location.pathname, type: 'POST', data: formData, success: function (data) { alert(data) }, cache: false, contentType: false, processData: false }); });
Versi ringkas
$("form#data").submit(function(e) { e.preventDefault(); var formData = new FormData(this); $.post($(this).attr("action"), formData, function(data) { alert(data); }); });