提问者:小点点

没有库的等效代码


我使用了一个教程来获得下面的ajax代码。在教程中,他们有库jquery.form.js.下面是代码:

function onsuccess(response,status){
    $("#onsuccessmsg").html(response);
        alert(response);
    }
    $("#uploadform").on('change',function(){
        var options={
        url     : $(this).attr("action"),
        success : onsuccess
    };
    $(this).ajaxSubmit(options);
        return false;
});

如果我不想要jquery呢。类型实现了js。使用普通ajax(没有库)的等效代码是什么?

使现代化

我尝试了以下代码:

$("#uploadform").on('change',function(){
                $.ajax({
                    url: $(this).attr("action"),
                    context: document.body,
                    success: function(){
                        $("#onsuccessmsg").html(response);
                        alert("asdf");
                    }
                });
                return false;
            });

现在它什么也做不了。


共1个答案

匿名用户

这更像是:(为格式问题道歉,我在手机上)

            $("#uploadform").on('submit',function(e){
                e. preventDefault() ;
                var formData = new FormData($(this)[0]);

                $.ajax({
                    url: $(this).attr("action"),
                    context: document.body,
                    data: formData, 
                    type: "POST",  
                    contentType: false,
                    processData: false,
                    success: function(response, status, jqxhr){
                        $("#onsuccessmsg").html(response);
                        alert("asdf");
                    }
                });
                return false;
            });

需要通过运行表单字段手动构建数据变量。您可能还想查看jQuery post,这是编写上述内容的一种速记方式。

您可以使用前面回答的问题获取需要传递到ajax数据字段的表单数据:

如何使用Javascript/jQuery获取表单数据?

还值得注意的是,如果您要发布表单中的文件,则表单必须具有enctype=“multipart/form data”。使用ajax提交表单时,需要设置contentType:false,processData:false。参考这篇文章。

我已经更新了上面的代码片段以反映这一点。

如果这回答了您的问题,请将其标记为正确答案。