#javascript #json #rest
Вопрос:
Я пытался извлечь эту строку/массив JSON и отобразить ее в таблице, но на самом деле в консоли ничего не происходит, там написано — «Ошибка типа не обнаружена: данные не определены».
Я попытался сделать это так, желательно, чтобы это было в собственном файле JavaScript, а не в файле HTML, но я просто проверял, смогу ли я заставить его работать.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<style>
th {
color: #fff;
}
</style>
<table class="table table-striped">
<tr class="bg-info">
<th>First</th>
<th>Last</th>
<th>Email</th>
</tr>
<tbody id="myTable">
</tbody>
</table>
<script>
var myArray = []
$.ajax({
method: 'GET',
url: 'My-Servers-API',
success: function(response) {
myArray = response.data
buildTable(myArray)
console.log(myArray)
}
})
function buildTable(data) {
var table = document.getElementById('myTable')
for (var i = 0; i < data.length; i ) {
var row = `<tr>
<td>${data[i].first_name}</td>
<td>${data[i].last_name}</td>
<td>${data[i].email}</td>
</tr>`
table.innerHTML = row
}
}
</script>
Если я перейду по URL-адресу вручную, он выдаст мне эту строку JSON
{
"all": [
{
"id": 1,
"firstName": "Fname",
"lastName": "Lname",
"email": "email@email.com",
"phones": [
{
"number": 12344567
}
],
"hobbies": [
{
"id": 1,
"name": "golf",
"wikiLink": "www.golf.com",
"category": "ball-and-club",
"type": "outdoors"
}
],
"address": {
"street": "StreetName",
"additionalInfo": "StreetInfo",
"cityInfo": {
"zipCode": "0001",
"city": "CityName"
}
}
}
]
}
Как вы, возможно, заметили, я полный новичок в JavaScript.
Комментарии:
1. Я вообще не вижу
.data
собственности в JSON.console.log(response)
и загляните в консоль.2. @hanlet Ty за ваш ответ, не знакомый с тем, что вы имеете в виду .данные, я сделал консоль. войдите и получите это обратно. Это было слишком долго, как и pastebin: ссылка
3.
data
Свойство не включеноresponse
, поэтому при установкеmyArray = response.data
оно устанавливаетсяmyArray
в значение undefined. Передача этого значенияbuildTable
означает, чтоdata
в этой функции не определено. Просто позвониbuildTable(response)
вместо этого.4. @Heretic Monkey Спасибо за редактирование, оно все еще не заполняет таблицу, к сожалению, но спасибо за предложение
5. Вы получаете ошибку о
data
том, что она не определена? Я никогда не говорил, что это исправит все ваши проблемы, только ту, на которую вы жаловались :). Например, вы, возможно, захотите позвонитьbuildTable(response.all)
вместо этого, я не знаю; это ваши данные и ваш проект — вам нужно немного подумать здесь…
Ответ №1:
Просто удалите .данные в вашей функции успеха и убедитесь, что вы получили доступ к этому свойству «все» в объекте вашего ответа. Я не знаю вашего URL-адреса, поэтому я заменил свой на jsonplaceholder, но это в основном одно и то же
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<style>
th {
color: #fff;
}
</style>
<table class="table table-striped">
<tr class="bg-info">
<th>name</th>
<th>username</th>
<th>Email</th>
</tr>
<tbody id="myTable">
</tbody>
</table>
<script>
var myArray = []
$.ajax({
method: 'GET',
url: 'https://jsonplaceholder.typicode.com/users',
success: function(response) {
myArray = response
console.log(myArray)
buildTable(myArray)
}
})
function buildTable(data) {
var table = document.getElementById('myTable')
for (var i = 0; i < data.length; i ) {
var row = `<tr>
<td>${data[i].name}</td>
<td>${data[i].username}</td>
<td>${data[i].email}</td>
</tr>`
table.innerHTML = row
}
}
</script>
Комментарии:
1. Спасибо за ваш ответ, доступ к этому свойству «все», казалось, был главной проблемой, о которой я забыл.
Ответ №2:
Кто-то, кто ответил на этот пост, на самом деле дал мне решение, но ответа сейчас нет, и, к сожалению, я не могу вспомнить ваше имя сейчас.
Это то, что в конечном итоге сработало на меня.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<style>
th {
color: #fff;
}
</style>
<table class="table table-striped">
<tr class="bg-info">
<th>name</th>
<th>username</th>
<th>Email</th>
</tr>
<tbody id="myTable">
</tbody>
</table>
<script>
var myArray = []
$.ajax({
method: 'GET',
url: 'My-Server-Url',
success: function(response) {
myArray = response
console.log(myArray)
buildTable(myArray)
}
})
function buildTable(data) {
var table = document.getElementById('myTable')
for (var i = 0; i < data.all.length; i ) {
const da = data.all[i];
var row = `<tr>
<td>${da.first_name}</td>
<td>${da.last_name}</td>
<td>${da.email}</td>
</tr>`
table.innerHTML = row
}
}
</script>
Спасибо всем.