#jquery #json
#jquery #json
Вопрос:
Хорошо, я пытаюсь получить заголовок из файла: main.txt , но это main.txt в той же папке (как вы можете видеть, это JSON).
Я использую это:
<!DOCTYPE html>
<html>
<head>
<style>img{ height: 100px; float: left; }</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div id="images">
Hello<br />
</div>
<script>
$.getJSON("main.txt",
function(data) {
$.each(data.items, function(i,items){
$("#images").append(items.id);
if (i == 3)
return false;
});
});
</script>
</body>
</html>
Однако … ничего не возвращается обратно, и в консоли Google Chrome ошибок нет.
Комментарии:
1. ничто не возвращается обратно, означает, что вы не получаете ответ от сервера или обработчик успеха не вызывается
Ответ №1:
Ответ прост: ваш файл не является допустимым JSON. Поэтому jQuery не может проанализировать его, и успешный обратный вызов не выполняется.
В JSON ключи и строки должны быть в двойных кавычках. Т.е.
{
'title': 'Home',
...
должно быть
{
"title": "Home",
...
Это всего лишь пример; вы должны исправить весь файл.
Используйте JSONLint для проверки вашего JSON. Ваш текущий текст выдает:
Parse error on line 1:
{ 'title': 'Home',
-----^
Expecting 'STRING', '}'
Также ;
в конце неверно.
Ответ №2:
Предполагая, что вы не выполняете междоменный запрос, у вас возникают следующие проблемы. JSON недопустим, как уже упоминалось @Felix.
Вы можете проверить это, перейдя в jsonlint.
Это сработало для меня локально:
$(function(){
$.getJSON("SOQ.txt",
{
tags: "title",
tagmode: "any",
format: "json"
},
function(data) {
console.log(data);
$.each(data.items, function(i,item){
console.log(item.id);
});
});
});
Вот допустимый JSON:
{
"title": "Home",
"ids": [
{
"currentID": 1,
"leftMap": 0,
"rightMap": 0,
"upMap": 0,
"downMap": 0
}
],
"signs": [
{
"x": 8,
"y": 13,
"map": 1,
"text": "Welcometothegame.<br/><br/>Outsideworldislocked.Makeyourownworld."
}
],
"entrances": [
{
"x": 12,
"y": 4,
"tile_after": 167,
"item_req": 0
},
{
"x": 3,
"y": 5,
"tile_after": 166,
"item_req": 0
},
{
"x": 7,
"y": 7,
"tile_after": 166,
"item_req": 5
}
],
"items": [
{
"id": "6",
"x": 10,
"y": 2
},
{
"id": "1",
"x": 5,
"y": 3
}
],
"monsters": [
{
"id": "1",
"x": 13,
"y": 9
}
],
"map": [
[
1,
1,
1,
1,
1,
1,
1,
190,
115,
1,
1,
1,
1,
1,
1,
2
],
[
190,
190,
190,
190,
190,
190,
190,
190,
13,
148,
148,
148,
148,
148,
121,
2
],
[
1,
520,
127,
127,
127,
127,
127,
13,
13,
148,
167,
167,
167,
148,
343,
1
],
[
1,
520,
127,
166,
166,
166,
127,
13,
13,
148,
167,
167,
167,
148,
343,
1
],
[
1,
520,
127,
166,
166,
166,
127,
13,
13,
148,
148,
148,
183,
148,
343,
1
],
[
1,
520,
364,
174,
127,
361,
127,
13,
13,
13,
13,
13,
13,
13,
13,
1
],
[
115,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
115
],
[
1,
514,
13,
13,
394,
343,
145,
220,
145,
145,
145,
13,
13,
13,
13,
1
],
[
1,
514,
13,
13,
343,
118,
145,
166,
166,
166,
145,
13,
13,
13,
13,
1
],
[
1,
514,
514,
13,
118,
118,
145,
166,
166,
522,
145,
13,
13,
13,
13,
1
],
[
1,
1,
1,
115,
1,
1,
145,
145,
145,
145,
145,
1,
1,
1,
1,
1
]
]
}
Ответ №3:
Глядя на http://mystikrpg.com/main.txt , элемент items содержит свойства ‘id’, ‘x’ и ‘y’. Нет никакого свойства ‘media’. Это причина, по которой ваш код не работает.
Комментарии:
1. ВЫ ОШИБАЕТЕСЬ — это событие не получает никакого ответа. jsbin.com/ubupov/edit#javascript ,html (нам нужно протестировать его в той же доменной среде)
2. @RoyiNamir: Вы не получите никакого ответа, потому что вы не можете выполнять междоменные вызовы в JavaScript. Но поскольку это тот же домен для OP, он может получить доступ к контенту, и на самом деле нет свойства media. Редактировать: OP, похоже, изменил код, так что это не проблема.
3. @Felix Kling тогда я неправильно понял sry…
:)
Ответ №4:
Это в вашем домене или в другом домене? Вы не можете использовать его для другого домена… используйте JSONP
Используйте, jQuery.parseJSON(data)
прежде чем разбираться с этим.
$.each(jQuery.parseJSON(data).items, function(i,item){
Комментарии:
1.
getJSON
неявно устанавливаетсяdataType:"json"
, и ответ json анализируется автоматически2. и вызывающая страница тоже находится в этом домене ?
3. Нет. также я немного изменил код, чтобы отразить идентификаторы и URL-адрес карты
4. вы изменили $.getJSON(«main.txt «, в .js?
5. Почему в .js? Это не .js .. это текстовый файл.