autosuggest, WS и JSON проблема - PullRequest
1 голос
/ 01 марта 2011
$.ajax({
        type: "POST",
        url: "/webservices/AutoSuggestWebService.asmx/GetSuggestedRestaurants",
        data: "{'prefixText': '" + $('#ctl00_ctl00_cplMPBody_txtSearch').val() + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            data = msg.d;
            alert(msg.d)
            $("#ctl00_ctl00_cplMPBody_txtSearch").autocomplete(data);
        }
    })

где данные

["some text","another some textz","huh just text"]

WS:

[WebMethod]
        public string GetSuggestedRestaurants(object prefixText)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            string json = js.Serialize(new RestaurantSearchHelper(DaoFactory).GetSearchSuggest(prefixText.ToString(), PageBase.CurrentCountry));
        }

, но если я ищу по слову "так", я ничего не получаю.

Если ws возвращает

[WebMethod]
        public string GetSuggestedRestaurants(object prefixText)
        {
            return  "Aeroplane dkhashd Apple Ambulance Border Crops Desalination Elephants  Parrot ";
        }

, а js выглядит как

data = msg.d.split(" ");
alert(data)

, тогда данные выглядят как

Aeroplane,dkhashd,Apple,Ambulance,Border,Crops,Desalination,Elephants,Parrot

и работают с автоподстановкой.Что будет с первым json, если данные

["some text","another some textz","huh just text"]

1 Ответ

1 голос
/ 02 марта 2011

Ваша первая ошибка в том, что текст

{'prefixText': 'bla bla'}

- это НЕ допустимая строка JSON. Это может быть правильный инициализатор объекта в JavaScript, но неправильно закодированный JSON соответствует http://www.json.org/ и RFC4627 . Правильная строка JSON будет

{"prefixText": "bla bla"}

или следующие

data: '{"prefixText": "' + $('#ctl00_ctl00_cplMPBody_txtSearch').val() + '"}'

в вашем случае (с небольшими возможными проблемами, если $('#ctl00_ctl00_cplMPBody_txtSearch').val() содержит "или \ символы внутри). Я рекомендую вам http://www.jsonlint.com/ сайт, где вы можете проверить любые данные JSON.

Следующая проблема на стороне сервера. Веб-метод ASMX должен выглядеть следующим образом

[WebMethod]
[ScriptMethod (ResponseFormat = ResponseFormat.Json)]
public List<string> GetSuggestedRestaurants(string prefixText) {
    return new RestaurantSearchHelper(DaoFactory).GetSearchSuggest(
                   prefixText,
                   PageBase.CurrentCountry);
}

и соответствующий класс должен иметь атрибут [ScriptService].

Я рекомендую вам использовать JSON.stringify метод:

data: JSON.stringify({ prefixText: $('#ctl00_ctl00_cplMPBody_txtSearch').val() })

вместо ручной JSON-сериализации. Подробности см. В моем другом ответе , в котором есть ссылка на рабочий демонстрационный проект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...