JSON и jQuery.ajax - PullRequest
       17

JSON и jQuery.ajax

7 голосов
/ 16 апреля 2010

Я пытаюсь использовать автозаполнение пользовательского интерфейса jQuery для связи с веб-сервисом с responseformate JSON, но я не могу этого сделать.

Мой веб-сервис даже не выполняется, путь должен быть правильным, так как сообщение об ошибке не содержит жалоб.

Что меня поражает, так это заголовки, ответ - мыло, но запрос - json, должен ли он быть таким?

Response Headersvisa källkod
Content-Type application/soap+xml; charset=utf-8


Request Headersvisa källkod
Accept application/json, text/javascript, */*
Content-Type application/json; charset=utf-8

Сообщение об ошибке, которое я получаю, выглядит следующим образом (извините за огромное сообщение, но оно может иметь значение):

soap: ReceiverSystem.Web.Services.Protocols.SoapException: серверу не удалось обработать запрос. ---> System.Xml.XmlException: данные на корневом уровне недействительны. Строка 1, позиция 1. в System.Xml.XmlTextReaderImpl.Throw (исключение e) в System.Xml.XmlTextReaderImpl.Throw (String res, String arg) в System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace () в System.Xml.XmlTextReaderImpl.ParseDocumentContent () в System.Xml.XmlTextReaderImpl.Read () в System.Xml.XmlTextReader.Read () в System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read () в System.Xml.XmlReader.MoveToContent () в System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.MoveToContent () в System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement () в System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest () в System.Web.Services.Protocols.SoapServerProtocol.RouteRequest (сообщение SoapServerMessage) в System.Web.Services.Protocols.SoapServerProtocol.Initialize () в System.Web.Services.Protocols.ServerProtocolFactory.Create (Тип типа, контекст HttpContext, запрос HttpRequest, ответ HttpResponse, Boolean & abortProcessing) --- Конец внутренней трассировки стека исключений ---

Это мой код:

$('selector').autocomplete({   
   source: function(request, response) {
                $.ajax({
                    url: "../WebService/Member.asmx",
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    type: "POST",
                    data: JSON.stringify({prefixText: request.term}),

                    success: function(data) {
                        alert('success');
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown){
                        alert('error');
                    }
                })
                }, 
   minLength: 1,
   select: function(event, ui) {

   }
  });

А мой веб-сервис выглядит так:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class Member : WebService
{

    [WebMethod(EnableSession = true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string[] GetMembers(string prefixText)
    {
       code code code
    }

}

Что я делаю не так? Заранее спасибо:)

1 Ответ

13 голосов
/ 16 апреля 2010

Полагаю, вам нужно включить название метода в ваш URL:

/ WebService / Member.asmx / GetMembers

При использовании веб-сервиса мне всегда нравится указывать путь к корню (/ no ../), это может быть полезно, если вы делаете какие-либо перезаписи URL или используете маршрутизацию.

Вот хороший пост в блоге, посвященный обращению к веб-сервису из JQuery. http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/

...