jQuery

2010-08-17 16 views
7

से ASP.NET ASMX वेब सेवा को कॉल करना मैं JSON का उपयोग करके jQuery से ASMX को कॉल करने और एक SOAP त्रुटि प्रतिक्रिया प्राप्त करने का प्रयास कर रहा हूं।jQuery

मैं क्या गलत कर रहा हूं ?!

यह मेरा jQuery कॉल है:

<?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. ---&gt; 
    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&amp; abortProcessing) 

    --- End of inner exception stack trace ---</soap:Text></soap:Reason><soap:Detail /></soap:Fault></soap:Body></soap:Envelope> 

मैं के माध्यम से /Services/TeamPerson.asmx हिट कर सकते हैं:

[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 
    } 
    } 

मैं वापस एक बुरा सोप त्रुटि मिलती है:

$.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); } 
      }); 

यह मेरी वेब सेवा है मेरा ब्राउज़र और वेब विधि ठीक काम करता है। मैं भी 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> 

उत्तर

15

आप को परिभाषित नहीं कर रहे हैं कि कौन सी विधि सेवा पर कॉल करने के लिए। अपनी JQuery लाइन url: '/Services/TeamPerson.asmx', से url: '/Services/TeamPerson.asmx/SetPlayerStatus',

+1

इससे बड़ा अंतर आया, धन्यवाद! अब मुझे यह त्रुटि मिल रही है: {"संदेश": "अमान्य JSON आदिम: सक्रिय।", "स्टैकट्रेस": "... क्या मैं डेटा {} पैरा को गलत में पास कर रहा हूं? –

+0

आह! मैंने नहीं किया उद्धृत स्ट्रिंग पैरा होने के लिए आवश्यक डेटा का एहसास नहीं है। यह काम करता है: डेटा: "{'सक्रिय': 'false', 'team_id':" + team_id + ", 'player_id':" + player_id + "}", –

5

शायद यह यूआरएल, साथ ही पैरामीटर में गायब होने वाली वेब विधि है।

var teamID = 123; 
var playerID = 456; 
var active = true; 
var webMethod = 'http://foo.net/TeamPerson.asmx/SetPlayerStatus' 
var parameters = "{'active':'" + active + 
       "','team_id':'" + teamID + 
       "','player_id':'" + playerID + "'}" 

$.ajax({ 
     type: "POST", 
     url: webMethod, 
     data: parameters, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) {  
       alert('all good'); 
     }, 
     error: function(e){ 
       alert('err'); 
     } 
}); 
+0

इसकी पुरानी, ​​मुझे पता है, लेकिन .... आप "डेटा" पैरामीटर में JSON.stringify (पैरामीटर) का उपयोग क्यों नहीं करते? –