проблема с jQuery Tokeninput и веб-сервисом asp.net - PullRequest
0 голосов
/ 01 августа 2011

Я написал на своем веб-сайте следующий asmx-файл веб-службы:

[WebService(Namespace = "http://eumcore.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class jsonTest : System.Web.Services.WebService {

    public jsonTest () {

    }

    [WebMethod(Description = "Gets the names matching part of a title.")]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public void getName() {
        List<nameEntry> nameList = new List<nameEntry>();
        nameList.Add(new nameEntry() {id="1", name="John"});
        nameList.Add(new nameEntry() { id = "3", name = "Alex" });
        this.Context.Response.ContentType = "application/json; charset=utf-8";

        JavaScriptSerializer js = new JavaScriptSerializer();
        string strJSON = js.Serialize(nameList);
        this.Context.Response.Write(strJSON);
    }    
}

Вначале я хотел, чтобы он каждый раз возвращал один и тот же массив, и результат веб-службы при его прямом вызове таков:

[{"id":"1","name":"John"},{"id":"3","name":"Alex"}]

Какой правильный ответ, когда я использую его в качестве локального ввода, результат будет хорошим, но когда я вызываю веб-сервис в методе ввода tokeninput (я назначил сообщение об ошибке функции), я получаюследующая ошибка: «200 parsererror undefined»

Может кто-нибудь помочь мне разобраться?

Спасибо

Дорон

РЕДАКТИРОВАТЬ: после игры с jqueryнемного кодировать мне удалось получить данные, но я получаю следующую ошибку:

200

parsererror

[{"id": "1", "name":"aaA"}, {"id": "3", "name": "aaA"}] {"d": null}

Я не понимаю, что такое d и почему этопустой

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Вы не должны вручную сериализовать этот JSON и записывать его. ASP.NET сделает это автоматически, если вы разрешите:

[WebMethod(Description = "Gets the names matching part of a title.")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<nameEntry> getNames() {
    List<nameEntry> nameList = new List<nameEntry>();

    nameList.Add(new nameEntry() {id="1", name="John"});
    nameList.Add(new nameEntry() { id = "3", name = "Alex" });

    return nameList;
}

Загвоздка в том, что вам нужно вызывать службу определенным образом с помощью jQuery , чтобы получить ответ JSON вместо XML, в частности с запросом POST типа содержимого application/json.

0 голосов
/ 01 августа 2011

Разве asp.net не упаковывает возвращаемые данные в объект для безопасности? Например, вы возвращаете не тот массив, который думали, а объект {}, который содержит ваш массив в свойстве ["d"].

Я думаю, что плагину требуется массив объектов, поэтому вы не сможете передать URL инициализатору tokeninput. Вместо этого при обратном вызове вашего запроса JSON выведите данные в нужную форму (массив объектов), а затем инициализируйте плагин tokeninput с этим массивом.

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