jquery的ajax()提交表单,数据成功保存到数据库,但为什么执行fail里面的语句?

下面的jquery的ajax()提交表单,表单数据成功保存到数据库,谷歌调试器的preview和response标签没有json错误信息,控制台也没有显示错误信息,但为什么会执行fail()里面的alert,而done()里面的跳转和alert不会执行?

    $(function () {
        //...

        $(document).on('submit', '#formProfile', function (e) {
            e.preventDefault();

            $("#submitProfile").addClass('disabled');
            $('#formProfile span>strong').text('');
            $('fieldset span').parent().parent().removeClass('has-danger');

            $.ajaxSetup({
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                }
            });

            $.ajax({
                        type: "POST",
                        url: "{{ url('user/profile/') }}",
                        dataType: 'json',
                        processData: false,
                        contentType: false,
                        cache: false,
                        data: formData
                    })
                    .done(function (data) {
                        alert('success');
                        location.href = "../articles/create";
                    })
                    .fail(function () {
                        //console.log(data);
                        alert('The server failed somewhere');
                        $("#submitProfile").removeClass('disabled');
                    });
        });
    })
</script>

下面是在fail()中console.log(data)打印的内容截图:

clipboard.png

跟跨域有关么?跳转到的文件所在目录和本文件所在目录不属于同一个父目录,但属于同一个父父目录,这算跨域么?

阅读 4.9k
5 个回答

dataType指定返回json格式的数据内容
看下控制台返回的数据结构符不符合格式要求

看到responseText为空

建议把done和fail换成success和error试一下,error里写

error:function(jqXML){
      alert(jqXML.status);
}

如果失败,就alert状态码看一下

不是跨域,应该是返回值的问题。

返回值的问题,你问问服务端返回的是什么

跨域举个例子,你一个项目是www.baidu.com,而你跳转的这个界面的域名是:www.baidu.cn,只要www,baidu,com这三个地方有一个不同,就是跨域。
ajax提交我一般是用success和error,没用过done和fail

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题