2015-10-19 43 views
0

我在做一个API调用此代码:通过JQuery AJAX请求收到我的数据有什么问题?

$.ajax({ 
    type: "GET", 
    url: "https://example/example.json", 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("apikey", "user") 
    }, 
    success: function(data){ 
     alert(data.folder.item); 
    } 
}) 

不返回任何内容,除了在控制台中的错误说:

"Uncaught TypeError: Cannot read property 'item' of undefined"

的JSON数据是这样的,当我使用在浏览器中的网址:

{ 
    "folder": { 
     "item": 123123, 
     "item 2": false, 
     "item 3": "content", 
     "item 4": [ 
      { 
       "subitem": "content" 
      }, 
      { 
       "subitem": "content2" 
      } 
     ] 
    } 
} 

我期待在警告框中显示“123123”,但不是。那么我做错了什么?

+3

登录'data'到控制台,看看它实际上包含。 – CBroe

+0

同样看看你的开发人员工具的Net标签中的响应,并确保你获得了JSON(使用正确的内容类型)。 – Quentin

+0

谢谢CBroe,我对代码并不是很有经验,所以它没有拿到我的账户上。这让我看到整个身份验证没有正确完成。该API不提供Javascript的例子,所以我创建的整个呼叫只是不工作。感谢提示,当我走入这样的问题时,我会牢记它。 – Joris508

回答

1

如果它获得它的JSON字符串将需要解析。试试这个:

$.ajax({ 
    type: "GET", 
    url: "https://example/example.json", 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("apikey", "user") 
    }, 
    success: function(data){ 
     var parsed = JSON.parse(data); 
     alert(parsed.folder.item); 
    } 
}); 

或者强迫jQuery来分析它给你:

$.ajax({ 
    type: "GET", 
    url: "https://example/example.json", 
    dataType: 'json', 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("apikey", "user") 
    }, 
    success: function(data){ 
     alert(data.folder.item); 
    } 
}); 
+0

我以为jQuery会自动执行此操作吗? – Mathletics

+2

@Mathletics - 只有当服务器输出正确的内容类型(或者用'dataType'覆盖它)时,它才会**但**。 – Quentin

+1

如果你添加'dataType:“json”'到'ajax'参数 – Igor