gpt4 book ai didi

JavaScript 表示对象内部已定义的变量未定义

转载 作者:行者123 更新时间:2023-11-28 08:24:27 31 4
gpt4 key购买 nike

我一直在摆弄我发现的 Ajax 上传教程 here 。我正在尝试检查服务器是否返回 "error" 作为状态。我发现了,它是data.result。当我在定义 data 时执行 console.log(data) 时,结果{"status":"error"} 正如预期的那样,但是当我尝试在同一函数中调用 data.result 时,它返回未定义。我尝试了一切,在未定义时将其定义在全局变量中,甚至将其传递给另一个函数。这是我所拥有的:

    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';}
});
}
}

最佳答案

经过多次讨论,最终的问题是 data.result 只能在 done 回调中可靠地使用,而不是在 progress 回调中可用OP 试图访问它的地方。

<小时/>

Ajax 调用的结果只能在提供数据的回调中使用。您不能在其他地方使用它。这是因为回调是异步调用的,并在函数的其余部分完成后的某个时间完成。

有关更多详细信息,请参阅此答案:How do I return the response from an asynchronous call?

<小时/>

此外,如果您正确使用 jQuery 的 ajax 调用,则不必自己进行任何 JSON 解析,因为 jQuery 会为您完成所有这些工作。我不太明白你得到的结果是什么,但是如果你为 ajax 调用指定了正确的数据结果类型,jQuery 会自动为你解析它,你不必调用 JSON.parse() 你自己。

关于JavaScript 表示对象内部已定义的变量未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22586598/

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