我一直在搞乱我发现的{Ajger上传教程here。我正在尝试检查服务器是否返回"error"
作为状态。我发现了它,它是data.result
。当console.log(data)
定义data
时,result
按预期{"status":"error"}
,但当我尝试在同一函数中调用data.result
时,它会返回undefined 。我尝试了所有的东西,当它没有被定义时,在全局变量中定义它,甚至将它传递给另一个函数。这就是我所拥有的:
progress: function(e, data){
// calc the completion percentage of the upload
var progress = parseInt(data.loaded / data.total * 100, 10);
console.log(data);
/* console log:
Object {disabled: false, create: null, dropZone: b.fn.b.init[1], pasteZone: b.fn.b.init[1], replaceFileInput: true…}
(more values)
result: "{"status":"error"}"
(more values)
*/
// update hidden input field and trigger a change
data.context.find('input').val(progress).change();
if(progress == 100){
updateProgress(data);
}
},
// ... later on in the file ...
function updateProgress(data){
console.log(data);
if(JSON.parse(data.result).status === 'error'){
data.context.addClass('error');
}else{
data.context.removeClass('working');
$('#drop').fadeOut(function(){
$('#drop').remove();
if(debug === 0){window.location = 'http://datastorage.iquestria.net/images/'+data.files[0].name+'?v2';}
});
}
}
答案 0 :(得分:0)
经过多次讨论后,最终的问题是data.result
仅在done
回调中可靠,而不是在OP试图访问它的progress
回调中。
Ajax调用的结果只能用于提供数据的回调。你不能在其他任何地方使用它。这是因为回调是异步调用的,并在函数的其余部分完成后的某个时间结束。
有关详细信息,请参阅此答案:How do I return the response from an asynchronous call?
另外,如果你正确使用jQuery的ajax调用,你不应该自己做任何JSON解析,因为jQuery会为你做所有这些。我并不完全明白你得到的结果是什么,但是如果你为ajax调用指定了正确的数据类型结果,jQuery会自动为你解析它并且你不会得到它必须自己致电JSON.parse()
。
答案 1 :(得分:0)
查看代码,看起来像是
JSON.parse(data.result).status
应该是
JSON.parse(data).result.status
如果'结果'是JSON响应的一部分。就像你的JSON是result: {"status":"error"}
result
一样,在你解析data
之前,它是不可用的。