无法从 JSON/jQuery 对象声明变量


Can't declare variable from JSON/jQuery object

所以,我能够成功返回我的AJAX请求,但是一旦我从中声明了一个变量,我的jQuery似乎就死了。

这是我从控制台发出的 JSON 响应:

Object {readyState: 4, responseText: "{"rsp":"1","msg":"show out screen!","time":null,"fn":"Mike","ln":"Maynard","ul":"0"}", status: 200, statusText: "success"}

这是我的jQuery:

    $.ajax({
        url: "clock.php",   
        type: "POST",   
        async: false,
        data: clockData,
        cache: false,
        timeout: 5500,
        error: function (clockData) {
        //var rsp = (clockData.fn);
        alert('Error');
            //do error
        },

        dataType: 'json',
        complete: function (clockData) {            
            console.log(clockData);
            var rsp = clockData[0].rsp;
            console.log(rsp);
            var ul = clockData[0].ul;   
            if(ul=='1') { 
                showUi(); 
            }
            var una = (clockData.fn + ' ' + clockData.ln);
            $('.nameBlock').text(una);
            $('.nameBlockFirst').text(clockData.fn);
            //--> show in ui
            if (rsp=='0') {
                console.log('got here2');
                var dir = 'In'; tcShow(dir);
            }   
            //--> show out ui                           
            if (rsp=='1'){
                alert('trying to show out screen2');        
                var dir = 'Out'; tcShow(dir);
            }
            //--> show in result
            else if (rsp=='2'){
                var time = (clockData.time); var dir = 'in'; showResult(time,dir,ul);
            }
            //--> show out result
            else if (rsp=='3'){
                var time = (clockData.time); var dir = 'out'; showResult(time,dir,ul);
            }
            //--> show message
            else if (rsp=='4'){
                endClock();
            }                   
            else {
                endClock();
            }
        }
    });

所以,控制台.log(时钟数据);返回正常,但控制台.log(rsp);永远不会发生...我很困惑..

根据您的响应文本,它看起来应该是clockData.rsp的。您正在执行clockData[0].rsp这意味着 clockData 是一个数组。但实际上,您的响应是一个键控对象,而不是数组。

编辑:我刚刚注意到您也在使用complete方法,而不是successcomplete的方法签名为 (jqXHR, textStatus)。如果你想要响应数据,你可以通过JSON.parse(clockData.responseText)访问它,或者更好的是,使用方法签名为(responseData,textStatus,jqXHR)的success回调。或者对于更现代的方法,请使用承诺。

参考: http://api.jquery.com/jquery.ajax/