【问题标题】:getting Cannot read property 'done' of undefined from ajax call无法从ajax调用中读取未定义的属性“完成”
【发布时间】:2020-11-08 19:51:36
【问题描述】:

我有这个 ajax 调用,它将数据从输入元素发送到服务器

function upload_files() {
    let form_data = new FormData($('#form_upload')[0]); // wieso [0] ? == alle inputs auf einmal
    $.ajax({
        type: 'POST',
        url: '/receave_files_lambda',
        data: form_data,
        contentType: false,
        cache: false,
        processData: false,
        dataType: "json", // 
        success: flask_return_data => insertdata(flask_return_data)//
        });
}

成功返回一个Json字符串,
如果调用成功,我想附加回调函数
通过使用done()解耦成功函数

$(function (){
   $("#do_upload").on("click", function (){
       let ajax_promise = upload_files();
       ajax_promise.done(function (data){
           console.log(data);
       })
   })

});

function upload_files () {
}

这给了我一个

Uncaught TypeError: Cannot read property 'done' of undefined

导致错误的原因是什么?

【问题讨论】:

  • 你可以在$.ajax()的返回值上调用done()。你没有用那个价值做任何事情。您没有returnupload_files_lab() 语句,因此它返回undefined。您还没有包含upload_files()(尽管我认为这是另一个错字)。如果你想在你调用它的函数之外对$.ajax的返回值做一些事情,你需要返回它。
  • 奇怪的是你没有收到Uncaught ReferenceError: upload_files is not defined 错误
  • @AlonEitan 是一个错字
  • 所以现在只需添加 return $.ajax({ .... 就可以了

标签: javascript jquery ajax promise


【解决方案1】:

您的问题是您的方法“upload_files”没有返回任何内容。

所以你定义了$.ajax({...}),但你忘了返回它。

将您的 upload_files 方法更改为以下内容,它应该可以正常工作。

function upload_files() {
    let form_data = new FormData($('#form_upload')[0]); // wieso [0] ? == alle inputs auf einmal
    return $.ajax({
        type: 'POST',
        url: '/receave_files_lambda',
        data: form_data,
        contentType: false,
        cache: false,
        processData: false,
        dataType: "json", // 
        success: flask_return_data => insertdata(flask_return_data)//
        });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 2023-03-07
    • 2020-10-04
    • 2016-11-04
    • 2018-10-07
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多