Невозможно получить доступ к элементам массива json при выполнении вложенного запроса ajax - PullRequest
0 голосов
/ 14 апреля 2011

Кто-нибудь знает, почему я не могу получить доступ к ключам массива в сгенерированном массиве json. По сути, я делаю вызов ajax, затем в случае успеха делаю еще один. Все работает нормально, и я получаю полный, исправный и действительный возврат массива json, но не могу получить доступ к ключам и значениям.

My JQuery

$("#register-form").submit(function(e){
  e.preventDefault();
  var firstname = $('#regfirstname').val();
  var surname = $('#regsurname').val();
  var email = $('#regregemail').val();
  var password = $('#regregpassword').val();
  var band = $('#regband').val();
  var website = $('#regwebsite').val();
  var company = $('#regcompany').val();
  var address = $('#regaddress').val();
  var city = $('#regcity').val();
  var state = $('#regstate').val();
  var postcode = $('#regpostcode').val();
  var country = $('#regcountry').val();
  var phone = $('#regphone').val();
  var age = $('#regage').val();
  var subscribe = $('#regsubscribe').val();
  $.ajax({
    type : 'POST',
    url : '/ajax/register',
    data : 'firstname='+firstname+'&surname='+surname+'&email='+email+'&password='+password+'&band='+band+'&website='+website+'&company='+company+'&street='+address+'&city='+city+'&state='+state+'&postcode='+postcode+'&country='+country+'&phone='+phone+'&age='+age+'&subscribe='+subscribe,
    success : function(data){
      // automatically log the user in
      $.ajax({
        type : 'POST',
        url : '/ajax/login',
        data : 'email='+email+'&password='+password,
        success : function(user){
          alert(user.logged_in);
        },
        datatype : 'json'
      });
    },
    datatype : 'json'
  });
});

Если я сделаю alert(user);, это предупредит весь массив json. Но как только я пытаюсь получить доступ к значению в нем, он возвращает неопределенное значение.

Пример массива json:

{"logged_in":true,"firstname":"Joe","surname":"Bloggs","Full_name":"Joe Bloggs","email":"address@email.com","phone":"123456789","website":"www.site.com.au","age":"25","street":"1 Road Street","city":"Town","state":"BLA","postcode":"1234","country":"13","company":"Freedman Electronics","band":"Daysend","subscribe":"2","mics":0}

Есть идеи?

Это вообще возможно сделать? (Я имею в виду AJAX внутри AJAX).

Ответы [ 3 ]

2 голосов
/ 14 апреля 2011

Используйте dataType вместо datatype в настройках AJAX. Это чувствительно к регистру.

0 голосов
/ 14 апреля 2011

Попробуйте загрузить json2.js и добавьте его в свое приложение

и попробуйте следующий код в блоке успеха

success : function(user){{
      var response=eval("("+JSON.stringify(user)+")");
      alert(response.logged_in);
      alert(response.firstname);
},
0 голосов
/ 14 апреля 2011

Проблема, похоже, связана с вашей страницей / ajax / login - ответ возвращается в виде строки, а не объекта json.Например, следующее:

<script type="text/javascript">
var test = {"logged_in":true,"firstname":"Joe","surname":"Bloggs","Full_name":"Joe Bloggs","email":"address@email.com","phone":"123456789","website":"www.site.com.au","age":"25","street":"1 Road Street","city":"Town","state":"BLA","postcode":"1234","country":"13","company":"Freedman Electronics","band":"Daysend","subscribe":"2","mics":0};

alert(test);
</script>

Отображение:

[object Object]

Если в вашем случае страница входа возвращает следующее предупреждение (пользователь):

{"logged_in":true,"firstname":"Joe","surname":"Bloggs","Full_name":"Joe Bloggs","email":"address@email.com","phone":"123456789","website":"www.site.com.au","age":"25","street":"1 Road Street","city":"Town","state":"BLA","postcode":"1234","country":"13","company":"Freedman Electronics","band":"Daysend","subscribe":"2","mics":0}

Затем вам нужно отладить выходной ContentType, приходящий со страницы входа (лучше всего), или сделать что-то вроде:

var jsonuser = JSON.parse(user);
alert(jsonuser.logged_in);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...