2013-04-10 4 views
0

У меня есть файл javascript, предназначенный для получения json-файла, и если он будет успешным, он выполнит функцию, а если нет, появится окно предупреждения с сообщением «error», но хотя синтаксис выглядит правильно, я получаю окно предупреждения с ошибкой каждый раз.Ошибка получения json-файла

эти два файла

var firstName = []; 
var lastName = []; 
var email = []; 
var password = []; 
var i; 

function insertRecord() { 
$.ajax({ 
    type: "GET", 
    url: "studio.json", 
    dataType: "json", 
    success: insertData, 
    error: function(){ alert("error"); } 
}); 

function insertData(data) { 
    if (localStorage) { 
     for (i = 0; i < data.User.length; i++) { 
      localStorage.setItem(firstName[i], data.User.firstName[j]); 
      localStorage.setItem(lastName[i], data.User.lastName[j]); 
      localStorage.setItem(email[i], data.User.email[j]); 
      localStorage.setItem(password[i], data.User.password[j]); 
     } 

     localStorage.setItem(firstName[i], document.getElementById("firstName").value); 
     localStorage[firstName[i]] = document.getElementById("firstName").value; 
     localStorage.setItem(lastName[i], document.getElementById("lastName").value); 
     localStorage[lastName[i]] = document.getElementById("lastName").value; 
     localStorage.setItem(email[i], document.getElementById("email").value); 
     localStorage[email[i]] = document.getElementById("email").value; 
     localStorage.setItem(password[i], document.getElementById("password").value); 
     localStorage[password[i]] = document.getElementById("password").value; 

     alert(localstorage[firstName]); 
    } 

    else 
     alert("Your browser does not support Local Storage"); 
} 

}

Файл JSON называется studio.json

{ 
    "Students":[ 
      { "first":"Arnold", "last":"Matthews", "class":"Tiny Tutus" }, 
      { "first":"Keesha", "last":"Franklin", "class":"Breakdancing"}, 
      { "first":"Dorothy", "last": "Ann", "class":"Acro"}, 
      { "first":"Wanda", "last": "Li", "class":"Ballet"}, 
      { "first":"Phoebe", "last": "Terese", "class":"Tap"} 
    ], 
    "Classes":[ 
     { "name":"Tiny Tutus", "time":"450","AMPM":"PM", "students":12}, 
     { "name":"Breakdancing", "time":"230","AMPM":"PM", "students":6}, 
     { "name":"Acro", "time":"810","AMPM":"AM", "students":15}, 
     { "name":"Tap", "time":"520","AMPM":"PM", "students":11}, 
     { "name":"Ballet", "time":"620","AMPM":"PM", "students":15}, 
     { "name":"Jazz", "time":"740","AMPM":"AM", "students":8 } 
    ], 
    "User":[ 
     { 
     "firstName": "Michael", 
     "lastName": "Jones", 
     "username": "MJone", 
     "email": "[email protected]", 
     "password": "qwerty" 
     }, 
     { 
     "firstName": "Michelle", 
     "lastName": "Lee", 
     "username": "MLee", 
     "email": "[email protected]", 
     "password": "asdfgh" 
     }, 
     { 
     "firstName": "Andrew", 
     "lastName": "Bob", 
     "username": "ABob", 
     "email": "[email protected]", 
     "password": "zxcvbn" 
     } 
    ] 
} 
+1

Почему вы задаете один и тот же вопрос несколько раз? http://stackoverflow.com/q/15913912/218196 (удалено), http://stackoverflow.com/q/15891809/218196 –

+0

О, я понял, что он даже не входит в localstorage. Он выходит из строя, прежде чем он переходит к функции. Я должен был протестировать на нескольких компьютерах –

+0

Не думаю, что это тот же вопрос. Когда-то речь идет о разборе json, это один из вызовов jquery. –

ответ

1

Вы знаете, вы можете просто хранить строку JSON, а затем разобрать его?

function storeUser() { 
    return $.ajax({ 
     type: "GET", 
     url: "studio.json", 
     dataType: "text" 
    }); 
} 

if (! localStorage.getItem('user')) { 
    storeUser().done(function(json) { 
     user = JSON.parse(json); 
     localStorage.setItem('user', json); 
    }); 
}else{ 
    user = JSON.parse(localStorage.getItem('user')); 
} 

, но вам нужно будет подождать, пока вызов асинхронного вызова завершится снова!

MDN также имеет polyfill для localStorage, поэтому он работает и для не поддерживающих браузеров.

+0

Спасибо за отзыв. Я пробовал этот скрипт, и я не знаю, работает он или нет. Можно ли добавить оповещения в функцию return $ .ajax part? –

+0

Код работает, если он работает для вас, невозможно ответить. Если вы используете браузер, такой как хром, вы можете открыть консоль, а на вкладке «Ресурсы» вы можете проверить локальное хранилище и удалить данные и т. Д., Когда вы отлаживаете такие вещи! – adeneo

+0

Спасибо, я думаю, что он должен работать, но я получаю сообщение об ошибке XMLHttpRequest не может загрузить местоположение файла. Происхождение null не разрешено Access-Control-Allow-Origin –

1

Вам нужно сделать что-то, называемое «отладки». Перепишите обработчик error, чтобы принять аргументы, которые jQuery передает на него, а затем распечатать их с помощью console.log или перехватить его и проверить в своем отладчике. Вот подпись ошибки:

Type: Function(jqXHR jqXHR, String textStatus, String errorThrown)

A function to be called if the request fails. The function receives three arguments: The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred. Possible values for the second argument (besides null) are "timeout", "error", "abort", and "parsererror". When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as "Not Found" or "Internal Server Error."

+0

Это кажется более сложным, чем я думал. Так что я должен просто заменить функцию error: function() {alert ("error")} с помощью Type: Function (jqXHR jqXHR, String textStatus, String errorThrown)? –

+0

Дело в том, что функция ошибки принимает три параметра. Поместите точку останова в первой строке функции ошибки, а когда она остановится, проверьте значение 'arguments'. Или замените вашу функцию ошибок на 'error: function (jqXHR, textStatus, errorThrown) {console.log (jqXHR, textStatus, errorThrown);}' и посмотрите, что напечатано на консоли. – 2013-04-11 01:34:49

Смежные вопросы