Tôi đang cố gắng gọi ASMX từ jQuery bằng cách sử dụng JSON và nhận được phản hồi lỗi SOAP.Gọi dịch vụ Web ASP.NET ASMX từ jQuery
Tôi đang làm gì sai ?!
Đây là cuộc gọi jQuery tôi:
$.ajax({
type: "POST",
url: '/Services/TeamPerson.asmx',
contentType: "application/json; charset=utf-8",
data: {'active':false, 'team_id':team_id, 'player_id':player_id},
dataType: "json",
success: function(msg) {
alert(msg);
},
error: function(xhr, msg) { alert(msg + '\n' + xhr.responseText); }
});
Đây là dịch vụ web của tôi:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
[ScriptService]
public class TeamPerson : WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void SetPlayerStatus(bool active, ulong team_id, ulong player_id)
{
// blah blah
}
}
tôi nhận được một lỗi SOAP khó chịu lại:
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body><soap:Fault><soap:Code>
<soap:Value>soap:Receiver</soap:Value></soap:Code>
<soap:Reason><soap:Text xml:lang="en">
System.Web.Services.Protocols.SoapException: Server was unable to process request. --->
System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace()
at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlTextReader.Read()
at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read()
at System.Xml.XmlReader.MoveToContent()
at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.MoveToContent()
at System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement()
at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()
at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)
at System.Web.Services.Protocols.SoapServerProtocol.Initialize()
at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response)
at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
--- End of inner exception stack trace ---</soap:Text></soap:Reason><soap:Detail /></soap:Fault></soap:Body></soap:Envelope>
tôi có thể nhấn /Services/TeamPerson.asmx
qua trình duyệt của tôi và phương thức web hoạt động tốt. Tôi cũng có các định nghĩa sau trong web.config:
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
<add verb="GET,HEAD,POST" path="TinyMCEHandler.aspx" type="Moxiecode.TinyMCE.Web.HttpHandler,Moxiecode.TinyMCE" />
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
Điều đó tạo ra sự khác biệt lớn, cảm ơn! Bây giờ tôi chỉ nhận được lỗi này: {"Nội dung": "Nguyên thủy JSON không hợp lệ: đang hoạt động", "StackTrace": "tại ... Tôi có đang truyền dữ liệu {} thông số sai không? –
Ah! I didn Không nhận dữ liệu cần thiết để có tham số chuỗi được trích dẫn. Dữ liệu này hoạt động: dữ liệu: "{'active': 'false', 'team_id':" + team_id + ", 'player_id':" + player_id + "}", –