当try 使用简写语法在使用jQuery的AJX请求中通过文件上传发送表单数据时,我遇到了"非法调用"错误.然而,当我使用longer .ajax()方法时,错误就会消失.我使用CodeIgniter作为服务器端框架.
简写语法出现错误的原因是什么?为什么.ajax()方法有效?
形式
<形式 id="add_category_形式" action="<?= base_url("CategoriesController/process_add_category") ?>" method="post" enctype="multipart/形式-data">
<input type="hidden" name="<?= $this->security->get_csrf_token_name() ?>" value="<?= $this->security->get_csrf_hash() ?>" />
<h2>Add a Category</h2>
<ul>
<li>
<input type="text" name="name" required>
<label>Category Name</label>
</li>
<li>
<textarea name="description" required></textarea>
<label>Description</label>
</li>
<label>Upload Images (5 Max)</label>
<input type="file" name="image" id="category_image" accept="image/*">
</ul>
<!-- FIXME: center the content of this last li tag -->
<button type="button" data-dismiss="modal" aria-label="Close">Cancel</button>
<button type="submit">Save</button>
</形式>
使用$.Post
$(document).ready(function() {
$("#add_category_形式").submit(function(e) {
e.preventDefault();
let url = $(this).attr("action");
if ($("#category_image").val() == "") {
alert("Please add an image");
} else {
let 形式Data = new FormData(this); // Pass the 形式 element
$.post(url, 形式Data, function(response) {
console.log(response);
csrfName = response.csrfName;
$("input[name='<?= $this->security->get_csrf_token_name() ?>']").val(response.newCsrfToken);
}, "json");
}
return false;
使用$.ajax
$(document).ready(function() {
$("#add_category_形式").submit(function(e) {
e.preventDefault();
if ($("#category_image").val() == "") {
alert("Please add an image");
}
let 形式Data = new FormData(this);
$.ajax({
url: "<?= base_url(''); ?>CategoriesController/process_add_category",
type: "POST",
data: 形式Data,
processData: false,
contentType: false,
dataType: "json",
success: function(response) {
console.log(response);
csrfName = response.csrfName;
$("input[name='<?= $this->security->get_csrf_token_name() ?>']").val(response.newCsrfToken);
},
error: function(xhr, status, error) {
console.error("AJAX Error:", status, error);
}
});
return false;
});
});