2012-01-12 15 views
0

私はXElement引数を受け入れることができるWebメソッドを持っています。これをjQuery Ajaxを使って呼び出したいと思います。単純なargumnets(int、stringなど)でjQuery Ajaxを使用して簡単なメソッドを呼び出すことはできますが、jQuery Ajaxを使用して複雑な型にどのように渡すかわかりません。jQueryを使ってWEBメソッドにXMLパラメータを渡す方法Ajax

するvar xmlFragment = 'AB':私はこのコードを書いた呼び出しの場合

[WebMethod] 
public bool MyGetPassXML(System.Xml.XmlDocument nima) 
{ 
    try 
    { 
     if (nima == null) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
    catch (Exception ex) 
    { 
     return false; 
    } 
} 


編集1)

私は、単純なWebサービスを持っています;

$("#Button2").click(function() { 
    $("#Loader").show(); 
    $.ajax({ 
     type: "POST", 
     url: "WebService.asmx/MyGetPassXML", 
     data: "{'nima':'" + xmlFragment + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(result) { 
      $("#Loader").hide(); 
      alert('OK'); 
     } 
    }); 
}); 

私はFirefoxとテストにそれをしたとFireBugで要求応答を参照してくださいが、私はこのエラーを取得:

{"Message":"Cannot convert object of type \u0027System.String\u0027 to type \u0027System.Xml.XmlDocument\u0027","StackTrace":" at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n at System.Web.Script.Services.WebServiceMethodData.StrongTypeParameters(IDictionary 2 rawParams)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary 2 parameters)\r\n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

は私がXElementSystem.Xml.XmlDocumentを変更するが、再び私はこのエラーを取得します。これをどうすれば解決できますか?

+0

あなたはXMLを使用していますか? JSONの方がはるかに簡単で、.netも同様です。 –

+0

私はXMLを使用していましたが、XMLパラメータを渡したい – Arian

+0

次に、XML文字列をJavascriptで手作業で連結し、AJAX呼び出しのデータとして渡す必要があります。あなたはXMLフラグメントをどうやって作成するのですか? jQueryを使用してAJAX呼び出しを配置し​​ますか?どちらも? –

答えて

1

Webメソッドの引数型としてXmlDocumentの代わりに、文字列に変更します。文字列からXmlDocumentを作成するには、.LoadXml(nima)を呼び出します。

編集たとえば、要求に答えるために:

は(私のC#のを許して)あなたは以下のような単純なクラスを持っていたとしましょう:

public TestClass { 

    public string Var1 { get; set; } 
    public string Var2 { get; set; } 

    public string void TestClass() 
    { 

    } 

} 

そして、次のようなWebメソッド:

[WebMethod] 
public bool MyGetPassJSON(TestClass nima) 
{ 
    // do something 
} 
そして、あなたのjavascript/jqueryのは、次のようになります。

あなたの場合は

は、あなたが持っている可能性があり:

"cities": ["A", "B","C","D"] 

これは非常に単純な例ですが、はるかに複雑なパラメータが可能です。 jsonを適切なjavascriptオブジェクトとして構築し、JSON.stringifyを使用してWebメソッドに送信することもできます。

+0

ありがとうございます。基本(文字列、int、...)? – Arian

+0

はい、それはjsonを使うべきときです。 – ScottE

+0

私はパスのデータ型のためにjsonを使用してのサンプルを表示することができます – Arian

0

XMLをjavascript変数として作成し、その変数をデータとしてAJAX呼び出しに渡します。

var xmlFragment = '<complexType><simple attributeEx="attributeA">A</simple><simple attributeEx="attributeB">B</simple></complexType>'; 

XMLの詳細については、http://www.w3schools.com/xml/default.aspを参照してください。

+0

私の編集1を参照してください。 – Arian

0

xmlFragmentで渡すものは、XML宣言がないため、正しいXMLではない可能性があります。また

- あなたはどこでも、私はあなたの方法は、JSON

私はあなたのサーバー側の技術に精通していないですが、あなたはXML型のコンテンツを送信したい場合は、noがある消費とは思わないと述べているしなかった場合それをJSONで記述する方法です。あなたはこのようなものを送信する必要があります。

 $.ajax({ 
      type: "POST", 
      url: "WebService.asmx/MyGetPassXML", 
      data: xmlFragment, 
      contentType: "application/xml; charset=utf-8", //not sure if charset should be there for xml 
      dataType: "json", //data type expected in _RESULT_. I have no idea what your method returns 
      success: function(result) { 
       $("#Loader").hide(); 
       alert('OK'); 
      } 
     }); 

をそして、あなたは全体のXMLを受け取るためにあなたの方法について何かを変更する必要があります。しかし、これはのみであり、XMLオブジェクトタイプの指示でサーバに何かを送るのが一般的です。

関連する問題