Я вызываю на веб-сайте ASP.NET 4.0 веб-службу (asmx-сервис на том же веб-сайте) двумя способами. Первый метод выполняется успешно и всегда возвращает действительный объект JSON, когда метод веб-службы asmx украшен [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
.Вызов веб-службы с поддержкой AJAX по POST работает, но с GET всегда возвращается xml
Но второй метод не потому, что возвращаемые данные XML, а не JSON, хотя я украсили метод asmx
по [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
(я не могу понять, почему JSON не возвращается при использовании GET
но при использовании POST
?)
POST
вызова службыvar serviceurl = "http://localhost:49441/WebService1.asmx/LoginUser" ; $.ajax({ url: serviceurl, type: 'POST', contentType: "application/json; charset=utf-8", data: JSON.stringify({ userName: userName, password: password }), dataType: "json", success: function (msg) { alert('Web service call succeeded. ' + msg.d); }, error: function (error) { alert('ERROR has occurred!'); alert(JSON.stringify(error)) } });
GET
вызова службыvar serviceurl = "http://localhost:49441/WebService1.asmx/LoginUser" ; $.ajax({ url: serviceurl, type: 'GET', contentType: "application/json; charset=utf-8", data: 'userName='+ userName + '&password=' + password, dataType: "json", success: function (msg) { alert('Web service call succeeded. ' + msg.d); }, error: function (error) { alert('ERROR has occurred!'); alert(JSON.stringify(error)) } });
EDIT 1:
код веб-службы, как показано ниже. При использовании
POST
я просто меняю код на использованиеUseHttpGet = false
для вызываемого метода.[WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. [System.Web.Script.Services.ScriptService] public class WebService1 : System.Web.Services.WebService { [WebMethod] [PrincipalPermission(SecurityAction.Assert, Unrestricted = true)] [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] public bool LoginUser(string userName, string password) { bool authenticated = false; if (userName.ToLower() == "mike" && password.ToLower() == "abcd") { authenticated = true; } return authenticated; } }
Код JS здесь не имеет значения. Чтобы понять, почему XML отправляется вместо JSON при публикации, нам нужно будет увидеть: a) код веб-службы или b) документацию веб-службы. – Adam
Хорошо. Позвольте мне добавить код веб-службы asmx. – Sunil
Возможно, что веб-служба с поддержкой ajax может быть вызвана только POST, а не GET из jQuery, но не уверен. – Sunil