2010-12-24 3 views
1

У меня странная проблема. Я пытаюсь использовать автозаполнение jQuery с веб-службой asmx. Мой код JavaScript как:jQuery autocomplete with asmx issue

$('#txtUsers').autocomplete('AjaxHandler.asmx/GetUserData', { 
    width: 320, 
    max: 5, 
    minChars: 3, 
    parse: function(data) { 
     var items = data.d; 
     var parsed = []; 
     for (var i = 0; i < items.length; i++) 
      parsed.push({ 
      data: [items[i]], 
      value: items[i], 
      result: [items[i]] 
     }); 
     return parsed; 
    } 
}); 

и мой код веб-сервис:

[WebService] 
[ScriptService] 
public class AjaxHandler : WebService 
{ 
    [WebMethod] 
    public List<UserData> GetUserData(string q) 
    { 
     //My code here..... 
    } 
} 

Однако мой веб-метод не вызывается из функции автозаполнения. Однако всякий раз, когда я пытаюсь вызвать тот же веб-метод из jQuery.ajax, он запускается правильно. Любая помощь?

ответ

1

Я проверил, что автозаполнение отправит запрос на получение, но вы обслуживаете только запросы на отправку. Итак, я вижу, что вы тоже это нашли.

Я предлагаю использовать простой HttpHandler и возвращать данные как json, используя newton json serializer, потому что вы веб-сервисы перетаскиваете «завернутые» данные. Это должно быть очень простой обработчик:

List<UserData> items = GetUserDataItems(); 
string json = JsonConvert.SerializeObject(items); 

// Retrun JSON клиенту

Также на клиентском код набора DATATYPE в JSON:

dataType: "json", 

и синтаксического анализа, как это:

parse: function (data) { 
    return $.map(data, function (row, i) { 
     return { 
      data: row, 
      value: row, 
      result: row 
     } 
    }); 
}, 
+0

Моя проблема не в json-данных. Моя проблема заключается в том, что метод веб-службы не вызывается из автозаполнения, где он отлично вызывается из $ .ajax. – Ashish

+0

Вы уверены, что ваш метод не был вызван aotocomplete? Вы пытались отладить службу при работе автозаполнения? Кажется, проблема в том, что автозаполнение не может анализировать данные. Но это просто предположение, что это может быть неправильно. –

+0

Просто попробуйте отправить json, это просто, и я уверен, что это будет работа. –

1

Да, я тоже столкнулся с этой проблемой. Ни ScriptService, ни ScriptMethod не помогают автозаполнению. Простейшая работа - это преобразовать .asmx в .ashx и управлять результатом возврата, как ожидается от плагина AJAX с помощью сериализатора JSON.

+0

Спасибо за предложение. Однако проблема была решена путем включения <конфигурация> <добавить имя = "HttpGet" /> <добавить имя = "HttpPost" /> in web.config – Ashish

+0

@Ashish благодарит за полезные комментарии! – Dewfy