JSON响应问题,结果对象的属性被读取为未定义但我可以看到它存在

时间:2015-05-21 18:39:29

标签: javascript json

我有一个json响应,它是从表单的ajax请求中获得的。响应存储在名为response的变量中,如下所示:

{
    data: {
      attributes:{
            //list of key-values
        }
        id: null,
        type: "job"
    },
    links: {
      modal: "/client/render/modals/job/success"
    },
    message: "job successfully created",
    success: "ActionSuccess"
}

问题出在我试图做的时候:

response.links.modal

response['links']['modal']

我收到此错误:

Uncaught TypeError: Cannot read property 'modal' of undefined

为什么当我在JSON响应中看到它时,我认为链接不存在(我可以看到它存在于响应的预览中(使用chrome))。

编辑:

发出ajax请求的代码:

function submit_form (request,method,data,type,target) {
    switch(type){
        case 'modal':
            $('#' + target).openModal();
        break;
        case 'target':

        break;
        case 'page':

        break
    }
    $.ajax({
        url: request,
        type: method,
        data: data,
        success: function(response){
            submit_callback(response,type,target)
        }

    })
}

回调:

function submit_callback(response,type,target) {
    switch(type){
        case 'modal':
            console.log(response) //shows that links exists
            console.log(response.links) //logs out as undefined
            post_page(response.links.modal,response.message,target) 
        break;
        case 'target':
            change_target(response,target);
            setUpPageElements();
        break
        case 'page':
            ('body').html(response)
        break;
    }
}

编辑:

使用JSON.stringify后的响应:

"{\"message\":\"job successfully created\",\"success\":\"ActionSuccess\",\"data\":{\"attributes\":\"//list of key-values\"},\"type\":\"job\",\"id\":null},\"links\":{\"modal\":\"/client/render/modals/job/success\"}}"

仅仅是一个FYI,属性确实存在,但这个问题不是必需的,所以我删除了它们,他们实际上并不是\"//list of key-values\"

1 个答案:

答案 0 :(得分:0)

好的,事实证明问题不是在前端而是在后端;由于某种原因它没有以json而不是文本的形式返回响应,在摆弄代码后我修复了问题,它现在将JSON作为JSON而不是JSON字符串返回。

记住小孩,始终确保服务器返回正确的类型!