2012-01-12 55 views
0

我有一個web方法可以接受XElement參數,我想用jQuery Ajax調用它。我可以使用jQuery Ajax和簡單的參數(如int,string,...)來調用簡單的方法,但是我不知道如何使用jQuery Ajax傳遞給一個複雜的類型。如何將XML參數傳遞給使用jQuery的WEB方法Ajax


編輯1)

我有一個簡單的Web服務:

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

對於我寫這段代碼調用:

VAR xmlFragment = 'AB' ;

$("#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"}

我改變System.Xml.XmlDocumentXElement,但我再次得到這個錯誤。我該如何解決這個問題?

+0

你是否已經結婚使用XML? JSON簡單得多,.net也可以處理它。 – 2012-01-12 05:45:53

+0

我使用了XML,我想通過XML參數 – Arian 2012-01-12 05:52:51

+0

然後,您需要在Javascript中手動連接XML字符串,並將其作爲您的AJAX調用中的數據傳遞。你是否問題,然後如何形成一個XML片段?使用jQuery進行AJAX調用?都? – 2012-01-12 05:56:21

回答

1

而不是XmlDocument作爲Web方法參數類型,我會將其更改爲一個字符串。您可以通過調用.LoadXml(nima)從字符串創建一個XmlDocument。

編輯回答爲例請求:

比方說,你有一個簡單的類像下面的(原諒我的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的可能看起來像以下:

$.ajax({ 
     type: "POST", 
     url: "WebService.asmx/MyGetPassJSON", 
     data: "{nima: {Var1:'something',Var2:'something else'}}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(result) { 
      $("#Loader").hide(); 
      alert('OK'); 
     } 
    }); 

在你的情況,你可以有:

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

這是一個非常簡單的例子,但更復雜的參數是可行的。您還可以將您的json構建爲適當的javascript對象,並使用JSON.stringify將其發送到您的web方法。

+0

謝謝,但我想知道我們可以使用以外的數據類型基礎知識(字符串,整數,...)? – Arian 2012-01-15 04:45:00

+0

是的,但那是你應該使用json的時候。 – ScottE 2012-01-15 17:54:44

+0

你能告訴我一個使用json傳遞數據類型的示例請 – Arian 2012-01-15 20:39:27

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 2012-01-13 14:14:32

0

您在xmlFragment中傳遞的內容可能不是正確的XML,因爲沒有XML聲明。

而且 - 如果你沒有說明任何地方,我不認爲你的方法消耗JSON

我不熟悉你的服務器端技術,但如果你想發送XML類型的內容不存在用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對象類型的任何內容。

相關問題