gpt4 book ai didi

JavaScript 使用 FormData 和 jQuery 的 ajax 上传文件在 iOS 上没有选择文件时返回错误 500

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:29:07 26 4
gpt4 key购买 nike

我使用 FormData 和 jQuery 的 ajax 以表单形式上传文件。一切正常,除非在 iOS 上没有选择文件,然后我从 PHP 脚本中收到错误 500。

在 PC 和 Android 上,无论是否选择文件,它都可以正常工作,但在 iOS 上,它只有在选择文件时才有效(不需要选择文件)。我使用的是最新的 iOS 11.4.1。

这是我在提交表单时调用的代码:

var form = this;
var data = new FormData(form);

var options = {
url: $(form).attr('action'),
data: data,
type: $(form).attr('method'),
cache: false,
contentType: false,
processData: false,
complete: function(r){
if(r.status == 200){
var response = r.responseJSON;

showErrors(form, response.errors);
$.each(response.actions, handleAction.bind(form));
}else{
showErrors(form, ['Vyskytla sa neočkávaná chyba, skúste znova neskôr']);
}
}
};
if(data.fake){
opts.xhr = function(){
var xhr = jQuery.ajaxSettings.xhr();
xhr.send = xhr.sendAsBinary;
return xhr;
}
opts.contentType = 'multipart/form-data;boundary='+data.boundary;
opts.data = data.toString();
}

$.ajax(options);

有一部分代码打印了来自服务器的响应,这是响应:

{"readyState":4,"responseText":"\n\n\n\n
Internal Server Error

\n
The server encountered an internal error or\nmisconfiguration and was unable to complete\nyour request.

\n
Please contact the server administrator at \n ssl@atlantis.sk to inform them of the time this error occurred,\n and the actions you performed just before this error.

\n
More information about this error may be available\nin the server error log.

\n\n","status":500,"statusText":"Internal Server Error"}

最佳答案

我终于找到了问题的解决方案,它不在服务器端。看起来 FormData 将 iOS 上的一个空文件对象的数组放入数据变量中,服务器无法处理。

我将 JS 编辑为:

var data = new FormData(form);
$.each($(form).find('input[type="file"]'), function(){
var name = $(this).attr('name');
var files = $(this).prop('files');

if(files.length == 0){
data.set(name, null);
}
});

关于JavaScript 使用 FormData 和 jQuery 的 ajax 上传文件在 iOS 上没有选择文件时返回错误 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51590366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com