Jquery получить информацию о массиве - PullRequest
3 голосов
/ 26 апреля 2010

У меня проблемы с ответом на Ajax-вызов Jquery ...

(Это скрипт для аутентификации пользователя, и ему необходимо вернуть его имя и идентификатор пользователя. Насколько я понимаю, я мог бы закодировать его как JSON и получить данные в следующем формате.

Возвращает ошибку «undefined» для оповещения () .

JavaScript

$.ajax({
 type: "POST",
 url: "myURL.php",
 data: {username: username, password: password},
 success: function(results) {
  //THIS IS WHERE THE PROBLEM IS
  alert('Hi '+results.name); //Should be "Hi Basil Fawlty"
  }
});

PHP (myURL.php)

//This comes from a SQL call that returns the following name
json_encode(array(
 'id'=>1,
 'name'=>'Basil Fawlty'
));

Любая помощь или идеи о том, где я иду не так, будет принята с благодарностью!

Спасибо.

Решение: Решением было добавление типа данных.

Ответы [ 5 ]

4 голосов
/ 26 апреля 2010

Тебе не хватает dataType: "json":

$.ajax({
 type: "POST",
 url: "myURL.php",
 dataType: "json",
 data: {username: username, password: password},
 success: function(results) {
  //THIS IS WHERE THE PROBLEM IS
  alert('Hi '+results.name); //Should be "Hi Basil Fawlty"
  }
});

Другая (менее многословная) альтернатива - jQuery.getJSON, если вы знаете, что получаете JSON.

3 голосов
/ 26 апреля 2010

Если вы используете jQuery <1.4, вы должны указать <code>dataType: "json".

Начиная с 1.4, dataType по умолчанию:

Интеллектуальная догадка (xml, json, script, или html)

Но для этого необходимо, чтобы заголовок ответа содержал строку "json". Итак, вы хотите отправить:

header('Content-type: application/json');

Эта недавно добавленная гибкость с dataType позволяет обработчикам реагировать на несколько возвращенных типов.

Если проблема не исчезнет, ​​вы должны предупредить весь ответ alert(results);, чтобы увидеть, что на самом деле возвращается.

Здесь много похожих ответов. Не уверен, кто это начал, но тот, кто, несомненно, вторгся в Польшу.

1 голос
/ 26 апреля 2010

Вам либо нужно указать dataType в запросе так:

$.ajax({
 type: "POST",
 url: "myURL.php",
 data: {username: username, password: password},
 dataType: "json", 
 success: function(results) {
  //THIS IS WHERE THE PROBLEM IS
  alert('Hi '+results.name); //Should be "Hi Basil Fawlty"
  }
});

или вы можете установить тип контента из php, используя

header( "Content-Type: application/json" );
1 голос
/ 26 апреля 2010

я предполагаю, что вы ожидаете JSON, но вы получаете строку.

1 голос
/ 26 апреля 2010

Убедитесь, что для dataType установлено значение JSON, чтобы получить объект ответа в методе успеха, например:

$.ajax({
 type: "POST",
 url: "myURL.php",
 dataType: "json",
 data: {username: username, password: password},
 success: function(results) {
  alert('Hi '+results.name);
 }
});

Подробности для dataType можно найти здесь .

В качестве альтернативы, вы можете сделать это :

$.getJSON( "myURL.php", {username: username, password: password}, 
  function(results) {
    alert('Hi '+results.name);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...