Javascript: неожиданный токен НЕЗАКОННЫЙ - PullRequest
4 голосов
/ 09 августа 2011

У меня ошибка Uncaught SyntaxError: Unexpected token ILLEGAL в Chrome.

Код

$("form#new_redemption").live('submit', function() {
  event.preventDefault();
  var that    = $(this);

  var action  = that.attr('action');
  var data    = that.serialize();

  $.ajax({
    type: "POST",
    url:  action,
    data: data,
    dataType: 'json',
    beforeSend: function(request) {
      request.setRequestHeader("Accept", "application/json");
    },
    success: function(res) {
      var response = JSON.parse(res.responseText); // <~~~ Unexpected token ILLEGAL
      if (response.message) {
        that.slideUp();
        $("#results").html(response.message).attr('class', 'notice').slideDown();
      }
      else if (response.url) {
        window.location = response.url 
      }
    },
    error: function(res) {
      var response = JSON.parse(res.responseText);
      $('#results').html(response.error).attr('class', 'error').slideDown();
    }
  });
  return false;
});

При ошибках этот код прекрасно работает.Но каждый раз, когда его успешный ответ, я получаю ошибку.Здесь есть проблема?И есть ли способ в VIM, чтобы выделить недопустимые символы JavaScript в коде?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Установка dataType в json автоматически проанализирует ответ JSON для вас в рамках обратного вызова success.

Попробуйте это:

$("form#new_redemption").live('submit', function() {
  event.preventDefault();
  var that    = $(this);

  var action  = that.attr('action');
  var data    = that.serialize();

  $.ajax({
    type: "POST",
    url:  action,
    data: data,
    dataType: 'json',
    beforeSend: function(request) {
      request.setRequestHeader("Accept", "application/json");
    },
    success: function(res) {
      if (response.message) {
        that.slideUp();
        $("#results").html(response.message).attr('class', 'notice').slideDown();
      }
      else if (response.url) {
        window.location = response.url 
      }
    },
    error: function(res) {
      var response = JSON.parse(res.responseText);
      $('#results').html(response.error).attr('class', 'error').slideDown();
    }
  });
  return false;
});
0 голосов
/ 02 марта 2013

Чтобы расширить один из комментариев выше, я получил эту ошибку из-за проблемы в возвращаемых результатах JSON. В частности, одно из строковых значений в данных ответа JSON содержало неэкранированную двойную кавычку. В моем случае это была моя собственная Ajax-функция, которую я вызывал, поэтому я исправил ее, пытаясь избежать двойных кавычек на сервере перед возвратом данных JSON. Затем я обнаружил, что у меня та же проблема с символами перевода строки, поэтому я использовал вызов str_replace, который я нашел в другом посте: json_encode PHP не экранирует все управляющие символы JSON

function escapeJsonString($value) {
    # list from www.json.org: (\b backspace, \f formfeed)    
    $escapers =     array("\\",     "/",   "\"",  "\n",  "\r",  "\t", "\x08", "\x0c");
    $replacements = array("\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t",  "\\f",  "\\b");
    $result = str_replace($escapers, $replacements, $value);
    return $result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...