2016-09-13 3 views
2

У меня есть запрос AJAX с JQuery «автозаполнения», как код ниже:Неожиданный токен <в формате JSON в положении 2 Jquery автозаполнения

var clientesList = []; 

    $("#clientes").autocomplete({ 
     source: function (request, callback) { 
      $.ajax({ 
       type: "POST", 
       url: "../../../Cliente/GetClientesByName", 
       data: "{'nome':'" + request.term + "'}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (data) { 
        debugger; 
        callback($.map(data.cities, function (obj) { 
         return obj.Main 
        })) 
       } 
      }) 
     } 
    }) 

Когда событие срабатывает, ошибка показала в jquery.min? ?

"Create:2 Uncaught SyntaxError: Unexpected token < in JSON at position 2"

Мой вход HTML заключается в следующем:

<input type="text" id="clientes" class="form-control col-md-10" /> 
+0

Ваш удаленный сервис может быть возвращение HTML и не JSON. Кроме того, ваши данные недействительны JSON. Попробуйте 'data: JSON.stringify ({nome: request.term})'. Эти два могут быть связаны (плохие данные -> ответ об ошибке HTML) – Phil

+0

Расширение комментария @ Phil, только кавычки являются допустимыми разделителями строк в JSON, а не апострофами. JSON может выглядеть как Javascript, но это не так. – Ouroborus

+0

Я бы сделал ставку на то, что ваш запрос перенаправляется, потому что вы вышли из системы, обработчик ошибок вышел или 404, а '<' исходит из того факта, что вы фактически получаете HTML-документ. –

ответ

2

Я думаю, что из-за вашу искаженную JSON data собственности, ваш серверный ресурс возвращает ошибку HTML, следовательно, неожиданный < характера в ответ.

Исправьте данные, создавая правильную строку JSON ...

data: JSON.stringify({nome: request.term}), 

Это даст значение как

{"nome":"whatever you typed"} 

который действует вместо

{'nome':'whatever you typed'} 

, который не из-за одиночных кавычек и, возможно, хуже в зависимости от значения request.term.

1

Попробуйте stringify данные ответа и разобрать его снова, посмотрите:

(...) 
success: function (data) { 
    // ---------------------------------------------- 
    // My suggestion 
    // ---------------------------------------------- 
    // Re-rendering the JSON -> Stringify > Parse 
    data = jQuery.parseJSON(JSON.stringify(data)); 
    // Debugging the JSON object in console 
    console.log(data); 
    // ---------------------------------------------- 

    debugger; 
    callback($.map(data.cities, function (obj) { 
     return obj.Main 
    })) 
} 
(...) 

Вы можете увидеть больше в относительном вопросе, как: Parsing JSON giving "unexpected token o" error