Каким должен быть правильный ответ веб-службы для отображения результатов ввода токена JQuery?

Я использую плагин ввода токена JQuery. Я попытался получить данные из базы данных вместо локальных данных. Моя веб-служба возвращает результат json, завернутый в xml:

 <?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">[{"id":"24560","name":"emPOWERed-Admin"},{"id":"24561","name":"emPOWERed-HYD-Visitors"}]</string>

Я проверил сайт http://loopj.com/jquery-tokeninput/, на котором говорится, что Скрипт должен выводить результаты поиска JSON в следующем формате:

[
    {"id":"856","name":"House"},
    {"id":"1035","name":"Desperate Housewives"}
]

Оба кажутся одинаковыми, но все же я не получаю элементы, отображаемые на моей странице.

Я тоже публикую свой код. Мой код Js: DisplayTokenInput.js

 $(document).ready(function() {
     $("#textboxid").tokenInput('PrivateSpace.asmx/GetDl_info', {

            hintText: "Type in DL Name", theme: "facebook",
            preventDuplicates: true,
            searchDelay: 200

            });
    });

Код моего веб-сервиса:

[WebMethod]

    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
     public string GetDl_info(string q)
    {
        string dl_input = string.Empty;
        DataSet ds;
        PSData ObjDl = new PSData();
        ds = ObjDl.GetDistributionList(q);

        List<DistributionList> DLObj = new List<DistributionList>();


        foreach (DataRow datarow in ds.Tables[0].Rows)
        {
            DistributionList dl_list = new DistributionList();
            dl_list.id = Convert.ToString(datarow["id"]);
            dl_list.name = Convert.ToString(datarow["name"]);

            DLObj.Add(dl_list);
        }

        dl_input = JsonConvert.SerializeObject(DLObj);

        return dl_input;

    }

 }
public class DistributionList
    {
        public string id { get; set; }
        public string name { get; set; }
    }

Я отправляю головную часть кода aspx, чтобы показать файлы библиотеки, которые я включил:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>Untitled Page</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

   <link href="../Styles/jquery-ui-1.8.20.custom.css" rel="stylesheet" type="text/css" />
      <link href="../Styles/token-input.css" rel="stylesheet" type="text/css" />

    <link href="../Styles/token-input-facebook.css" rel="stylesheet" type="text/css" />

    <script src="Scripts/Lib/jquery-1.7.2.min.js" type="text/javascript"></script>  

    <script src="../Scripts/jquery.tokeninput.js" type="text/javascript"></script>--%>

    <script src="DisplayTokenInput.js" type="text/javascript"></script>
<head>

person Xavier    schedule 26.11.2012    source источник
comment
добавили ли вы файл jquery.tokeninput.js и jquery и css на свою страницу с правильным путем   -  person rajesh kakawat    schedule 26.11.2012
comment
@rajeshkakawat ya Я сделал ... Я включил головную часть кода aspx в свой вопрос ... Пожалуйста, проверьте это тоже ..   -  person Xavier    schedule 26.11.2012
comment
проверьте консоль firebug, не показывает ли она ошибку   -  person rajesh kakawat    schedule 26.11.2012
comment
@rajeshkakawat Я проверил .. Он не показывает никаких ошибок .. Он просто показывает ответ, как я указал в моем вопросе .. Так что я предполагаю, что формат ответа может быть неправильным .. Я упомянул формат моего ответа веб-службы ..Это правильный ответ?   -  person Xavier    schedule 26.11.2012
comment
Если это строка, которую возвращает ваш веб-сервис, то проблема в том, что это ответ XML, а не JSON. Ваша служба сериализовала результаты поиска, которые вы хотели, в виде строки JSON, но затем обернула их в XML.   -  person Ryan Weir    schedule 26.11.2012
comment
@cookingwithrye ya точно .. Но как я могу этого избежать .. Я хочу результат json, а не результат json, завернутый в xml ..   -  person Xavier    schedule 26.11.2012
comment
проверьте, является ли ваш идентификатор элемента textboxid или нет   -  person rajesh kakawat    schedule 26.11.2012
comment
@rajeshkakawat Это только мой идентификатор текстового поля .. Так что только я получаю ответ .. Проблема только в формате ответа   -  person Xavier    schedule 26.11.2012
comment
вы можете вывести свой json   -  person rajesh kakawat    schedule 26.11.2012
comment
Я показал это в третьей строке своего вопроса ..   -  person Xavier    schedule 26.11.2012


Ответы (2)


Вы должны убедиться, что ваш запрос является POST-запросом. Не получить запрос. См. Этот ответ, чтобы узнать больше о том, почему: Как разрешить файлу ASMX вывод JSON

person Mark    schedule 26.11.2012
comment
Думаю, вы правы, плагин, который он использует, похоже, отправляет запросы на получение в соответствии с firebug. - person Ryan Weir; 26.11.2012

Я бы предположил, что код для плагина не устанавливает тип содержимого для запросов ajax в JSON, поэтому вы можете сделать это самостоятельно перед вызовом службы с помощью $ .ajaxSetup, то есть:

$.ajaxSetup({
  contentType: "application/json; charset=utf-8"
});

ОБНОВЛЕНИЕ: очевидно, что у служб asmx иногда возникают проблемы с частью 'charset = utf-8', поэтому, если это не сработает, вы можете попробовать просто 'application / json'

ОБНОВЛЕНИЕ 2:

Я не думаю, что проблему вызывает contentType, используйте следующее, чтобы принудительно выполнить POST для запросов ajax и посмотреть, исправит ли это это:

$.ajaxSetup({
  type: "POST", contentType: "application/json; charset=utf-8"
});

ОБНОВЛЕНИЕ 3:

В используемом вами плагине есть настройка по умолчанию, которая может изменять запросы с GET на POST. См. Здесь репозиторий GitHub: jquery.tokeninput.js < / а>

и в вашей копии файла js в проекте измените строку:

var DEFAULT_SETTINGS = {
    // Search settings
    method: "GET",

to

var DEFAULT_SETTINGS = {
    // Search settings
    method: "POST",

Я также предполагаю, что плагин создает запрос таким образом, чтобы в любом случае игнорировать глобальные настройки jquery ajax, поэтому вам больше не нужно включать мои предыдущие фрагменты.

person Ryan Weir    schedule 26.11.2012
comment
Следует ли мне включить это перед $ (# textboxid) .tokenInput ('PrivateSpace.asmx / GetDl_info', { - person Xavier; 26.11.2012
comment
Готово .. Я все равно получаю тот же ответ - person Xavier; 26.11.2012
comment
Если у вас есть firebug или chrome, проверьте с помощью консоли, являются ли запросы ajax для вашего автозаполнения запросами POST или GET. Если они по-прежнему GET-запросы после добавления кода выше, вам может потребоваться более внимательно изучить код плагина токена, чтобы увидеть, как он создает запросы ajax. - person Ryan Weir; 26.11.2012
comment
Похоже, что в js-файле плагина есть параметр, который вы можете изменить, чтобы выполнить это изменение с GET на POST. Смотрите мое редактирование - person Ryan Weir; 26.11.2012
comment
Я изменил метод DEFAULT_SETTINGS: POST, но все еще в консоли firebug веб-служба называется GET localhost: 3696 / SocialTask ​​/ Admin / PrivateSpace.asmx / - person Xavier; 26.11.2012
comment
Убедитесь, что ваш браузер не кэшировал старую версию js-файла, которая все еще использовала GET. Я просмотрел, где плагин фактически создает запрос ajax, и он должен учитывать тот параметр, который вы изменили на POST. - person Ryan Weir; 26.11.2012
comment
Я пробовал с локальными данными, он работает нормально .. Но не смог сделать то же самое с базой данных .. поддерживает ли TokenInput вызов веб-службы - person Xavier; 26.11.2012