Как бы я изменил свой ответ jQuery ajax, чтобы сделать то же самое с JSON, что он делает сейчас, возвращая JavaScript? - PullRequest
3 голосов
/ 24 октября 2010
$('.showprayer').click( function(event) 
{
  $.post('/show_prayer', { 'name' : $(this).text() }, function(data) 
  {
      eval(data);
  });
});

Приведенная выше функция jQuery возвращает следующую строку в качестве ответа ajax, возвращающегося с сервера:

'#prayer_date'.html("03/19/1968");

Кто-то ранее видел этот код, который ответил, что "returning javascript instead of JSON is a terrible way of using Ajax".

Моя проблема в том, что я думал, что это единственный способ сделать это.

Так что, если кто-то сможет просветить меня.,, если бы я хотел сделать то же самое, вернув JSON, то как бы это выглядело и будет ли это включать в себя значительно больше кода, чем мой текущий ответ ajax, который очень кратко меняет значение элемента prayer_date на его новоезначение даты?

Ответы [ 2 ]

2 голосов
/ 25 октября 2010

Просто пусть сервер возвращает дату в виде объекта JSON и ссылается на свойство в клиенте.Не забудьте сообщить функции AJAX, какой тип данных ожидается, поскольку вы не будете возвращать значение по умолчанию (html).

$('.showprayer').click( function(event) 
{
  $.post('/show_prayer', { 'name' : $(this).text() }, function(data) 
  {
      $('#prayer_date').html(data.Date);
  },'json');
});

Сервер возвращает:

"{ 'Date' : '03/19/1968' }"
1 голос
/ 24 октября 2010

Вы должны вернуть только объект json, такой как { "date": "03/19/1968" }, и затем вместо выполнения eval выполните $("#prayer_date").text(data.date); (или html, как показано в вашем примере. Итак, суть в том, что код, вызываемый в конечном счете, являетсято же самое, но он разработан немного лучше, и вы не используете eval.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...