2012-07-01 2 views
1

Я пытаюсь реализовать эту веб-api автозаполнение в стандартном приложении mvc. http://techbrij.com/987/jquery-ui-autocomplete-asp-net-web-apiJQuery Autocomplete - JSON.Parse error

Вот захват экрана от Firebug http://sdrv.ms/N0WkHP
enter image description here

Я создал метод контроллера и добавил скрипт JQuery, но я постоянно получаю «JSON.parse: неожиданный символ» ошибка. Я не вижу никаких необычных символов в своих данных.

$(document).ready(function() { 
$('#txtSearch3').autocomplete({ 
    source: function (request, response) { 
     $.ajax({ 
      url: '/home/Get', 
      type: 'GET', 
      cache: false, 
      data: request, 
      dataType: 'json', 
      success: function (json) { 
       // call autocomplete callback method with results 
       response($.map(json, function (name, val) { 
        return { 
         label: name, 
         value: val 
        } 
       })); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       //alert('error - ' + textStatus); 
       console.log('error', textStatus, errorThrown); 
      } 
     }); 
    }, 
    minLength: 2, 
    select: function (event, ui) { 
     alert('you have selected ' + ui.item.label + ' ID: ' + ui.item.value); 
     $('#txtSearch3').val(ui.item.label); 
     return false; 
    } 
}) 
}); 

// мой код контроллера

public IDictionary<int, string> Get(string term) 
    { 
     using (myEntities context = new myEntities()) 

     { 
      return context.Categories1.Where(x => x.CategoryName.Contains(term)).ToDictionary(x => x.CategoryId, x => x.CategoryName); 
     } 

    } 
+1

Не могли бы вы отправить ответ JSON, который вы получаете, когда отправляете запрос AJAX на '/ home/Get'? Также вы уверены, что ответ имеет этот заголовок 'Content-type: application/json; charset = utf-8'? – tftd

+0

Привет, мой ответ был System.Collections.Generic.Dictionary'2 [System.Int32, System.String] После того, как я добавил Response.ContentType = "application/json"; Response.ContentEncoding = System.Text.Encoding.UTF8 ; ответ никогда не завершается. Я вижу «загрузку» или занятый gif все время. –

ответ

0

ОК, наконец, понял это, мое возвращение должно было быть моим истинным json, не нужно для метки/значения.

Спасибо за полезные ответы

$(document).ready(function() { 
$('#txtSearch3').autocomplete({ 
    source: function (request, response) { 
     $.ajax({ 
      url: '/home/Get', 
      type: 'GET', 
      cache: false, 
      contentType: "application/json; charset=utf-8", 
      data: request, 
      dataType: 'json', 
      success: function (json) { 

       response($.map(json, function() { 
        return json; 

       })); 

      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       //alert('error - ' + textStatus); 
       console.log('error', textStatus, errorThrown); 
      } 
     }); 
    }, 
    minLength: 2, 
    select: function (event, ui) { 
     alert('you have selected ' + ui.item.label + ' ID: ' + ui.item.value); 
     $('#txtSearch3').val(ui.item.label); 
     return false; 
    } 
}) 

});

0

Попробуйте сделать свой обратный контроллер JSON.

public JsonResult Get(string term) 
{ 
    using (myEntities context = new myEntities()) 
    { 
     return Json(context.Categories1.Where(x => x.CategoryName.Contains(term)).ToDictionary(x => x.CategoryId, x => x.CategoryName)); 
    } 

} 
+0

жаль, что это не сработало, я получаю ответ внутреннего сервера, заголовок ответа очень длинный, вот пример: Тип 'System.Collections.Generic.Dictionary'2 [[System.Int32, mscorlib, Version = 4.0. 0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089], [System.String, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089]] 'не поддерживается для сериализации/десериализации словаря, ключи должны быть строками или объекты.

+0

Попробуйте 'ToList()' вместо этого, если вам не нужен словарь по какой-то причине. – Terry

+0

Привет, Im получает массив объекта назад - [{"label": "Карьера", "Значение": "2"}, {"label": "Construction/DIY", "value": "8" }, {"label": "Health", "value": "6"}, {"label": "Information Technology (IT)", "value": "5"}, {"label": "Products" , "value": "25"}, {"label": "Property", "value": "1"}, {"label": "Travel & Holidays", "value": "3"}, {" label ":" Weddings "," value ":" 7 "}] - но в поле автозаполнения отображается список записей [object Object] - можете ли вы рассказать мне, как преобразовать это в строки? - благодаря. –