我有一些代码可以帮助我解决错误 - 我似乎无法找到解决方法或在javascript中找到一个好的解决方案。
var data = new FormData();
$.each(files, function(key, obj)
{
data.append(obj.name, obj.file);
});
data.append('submitCustomizedDatas', 1);
data.append('ajax', 1);
$.ajax({
url: $('#customizationForm').attr('action'),
type: 'POST',
data: data,
cache: false,
dataType: 'json',
processData: false,
contentType: false,
async: false,
success: function(data, textStatus, jqXHR)
{
if(typeof data.errors === 'undefined')
{
$.each(files, function(key, obj)
{
$('input[name="'+obj.name+'"]').addClass('filled');
previewFile($('input[name="'+obj.name+'"]'), obj.file);
});
$('.uploadingfiles').text('Upload Complete!');
}
else
{
$('.uploadingfiles').text('Error while uploading, please refresh the page and try again');
}
$('.myoverlay').click(function(){$(this).remove()});
},
error: function(jqXHR, textStatus, errorThrown)
{
$('.uploadingfiles').text('ERRORS: ' + errorThrown);
$('.myoverlay').click(function(){$(this).remove()});
}
});
这用于在我正在制作的网站上传文件。
这一点Ajax在JS控制台成功时就开始出错了。错误是说“数据为空”'在这一行:
if(typeof data.errors === 'undefined')
如果这看起来正确,或者如果可能有一些非常明显的东西我在这里失踪,那就好奇了。
答案 0 :(得分:1)
在javascript中,the opening brace placement matters。您的代码可能并不意味着您认为这意味着您放置了支架。
此外,不推荐使用.success和.error。 Consider using .done or .fail methods.
Typeof null返回一个对象,因此如果data.errors为null,则检查将失败。考虑做
if (!data.errors) {
...
}
最后,从服务器返回的数据可能为null。这将导致您看到的null异常。您可以调试应用程序以查看是否属于这种情况。
答案 1 :(得分:0)
您描述的错误"数据为空...",非常精确。当您尝试从null
对象访问属性时,JavaScript会引发错误。在这种情况下,您尝试访问errors
对象的data
属性,在这种情况下为null
(您的服务器未返回任何内容)。
在进行任何其他假设之前,您应该验证数据对象:
success: function(data, textStatus, jqXHR) {
if (data !== null) { // first make sure data is not null
if(typeof data.errors === 'undefined') { // then you can safely trust this line
// ...
}
}
// ...
}
观看jqXHR.status
可能是了解服务器状况的方法。
编辑:实际上,我建议您始终使用服务器响应的状态代码来检查错误:
success: function(data, textStatus, jqXHR) {
if (jqXHR.status === 200) { // 200 - Success
// Everything went well
// ...
} else {
// Something went wrong
// console.log(textStatus);
if (data !== null) { // first make sure data is not null
if(typeof data.error !== 'undefined') { // // check if the server has returned any error information
// handle specific error
// console.log(data.error);
// ...
}
}
}
}
希望它有所帮助!