Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 延迟的jQuery AJAX请求未运行done()回调函数_Javascript_Jquery_Ajax_Jquery Deferred_Mockjax - Fatal编程技术网

Javascript 延迟的jQuery AJAX请求未运行done()回调函数

Javascript 延迟的jQuery AJAX请求未运行done()回调函数,javascript,jquery,ajax,jquery-deferred,mockjax,Javascript,Jquery,Ajax,Jquery Deferred,Mockjax,我已经使用jQuery Deferred object和AJAX请求设置了一个简单的演示程序,以模拟我的应用程序是如何实现的 我的问题是,自从我从旧的非延迟方法切换过来后,我就无法获得成功的回调 只调用fail()回调。有人能帮我成功回拨电话吗?我看不出哪里出了问题?谢谢你的帮助 我的演示在这里 我以前的AJAX调用是这样的… var ajax = $.ajax({ type: 'POST', async: false, contentType: 'application

我已经使用jQuery Deferred object和AJAX请求设置了一个简单的演示程序,以模拟我的应用程序是如何实现的

我的问题是,自从我从旧的非延迟方法切换过来后,我就无法获得成功的回调

只调用
fail()
回调。有人能帮我成功回拨电话吗?我看不出哪里出了问题?谢谢你的帮助

我的演示在这里

我以前的AJAX调用是这样的…

var ajax = $.ajax({
    type: 'POST',
    async: false,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    url: '/gettask',
    data: {
        action: 'load-task-record',
        task_id: taskId
    },
    success: function(data) {
        // my success functionality here
    }
});
// Call function that execute AJAX request and returns it
var ajaxRequest = ajaxLoadTaskData();

ajaxRequest.done(function(response) {

    if( response.success ) {
        alert('AJAX request success');
    }else{
        // output the contents of response.errors
    }

}).fail(function(response) {
    // AJAX request failed
    console.log('response', response);
    alert('AJAX request failed');

}).always(function(response) {

});


// Run AJAX request and return Promise()
function ajaxLoadTaskData() {
    return $.ajax({
        type: 'POST',
        async: false,
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        url: '/gettask',
        data: {
            action: 'load-task-record',
            task_id: '1',
        },
    });
}
使用延迟对象的新AJAX调用…

var ajax = $.ajax({
    type: 'POST',
    async: false,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    url: '/gettask',
    data: {
        action: 'load-task-record',
        task_id: taskId
    },
    success: function(data) {
        // my success functionality here
    }
});
// Call function that execute AJAX request and returns it
var ajaxRequest = ajaxLoadTaskData();

ajaxRequest.done(function(response) {

    if( response.success ) {
        alert('AJAX request success');
    }else{
        // output the contents of response.errors
    }

}).fail(function(response) {
    // AJAX request failed
    console.log('response', response);
    alert('AJAX request failed');

}).always(function(response) {

});


// Run AJAX request and return Promise()
function ajaxLoadTaskData() {
    return $.ajax({
        type: 'POST',
        async: false,
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        url: '/gettask',
        data: {
            action: 'load-task-record',
            task_id: '1',
        },
    });
}
模拟对/gettask的AJAX请求的AJAX响应

// Mock AJAX response for AJAX request to /gettask
$.mockjax({
    url: '/gettask',
    contentType: 'text/json',
    responseTime: 100,
    response: function(settings) {
        console.log('mockJax GET to /gettask :');
        //console.log(settings);
        if (settings.data.value == 'err') {
            this.status = 500;
            this.responseText = 'Validation error!';
        } else {
            var taskrecord = { 'name1': 'bar' };
            this.responseText = taskrecord;
        }
    },
});

/gettask在该JSFIDLE环境中不存在。使用console.log(设置)查看响应的全部内容。您将看到状态为404

“从jQuery 1.8开始,不推荐在jqXHR($.Deferred)中使用async:false;您必须使用success/error/complete回调选项,而不是jqXHR对象的相应方法,如jqXHR.done()或不推荐的jqXHR.success()。”此外,
contentType:'application/json;charset=utf-8',
与您发送的数据不匹配:
数据:{action:'load task record',task_id:taskId}
。如果要向服务器发送JSON,则应发送JSON,而不是将转换为格式参数的对象。@KevinB谢谢!我使用了
async:false
,通过不使用Deferred来解决我之前遇到的问题。所以我最终决定换一个,但忘了换那个部分。非常感谢我更新了jQuery并更改了
async:true
。还有其他的想法吗?为什么它仍然会
失败()
?由于404 atm而失败。猜测mockjax不起作用。