2011-04-04 75 views
0

我正在嘗試使用jQuery調用Web服務。出於某種原因,結果以XML的形式返回......除了自己編寫解析器之外,還有一種更好的方式來獲得結果。如何解析或訪問從jQuery的Web服務調用返回的值?

這是返回的值:

<?xml version="1.0" encoding="utf-8"?>\r\n<string xmlns="http://tempuri.org/">"Hello World"</string> 

這是HTML:

<script type="text/javascript"> 

    var url = '<%=ResolveUrl("~/Services/ProjectDialog.asmx/HelloWorld")%>'; 

    function callWebService() { 

     jQuery.ajax({ 
      cache: false, 
      type: 'POST', 
      complete: onComplete, 
      data: null, 
      dataType: 'application/json; charset=utf-8', 
      error: onError, 
      success: onSuccess, 
      url: url 
     }); 
    } 

    function onComplete(status, xmlHttpRequest) { 
     var stop = ""; 
    } 
    function onError(xmlHttpRequest, status, error) { 
     var stop = ""; 
    } 
    function onSuccess(data, status, xmlHttpRequest) { 
     var stop = ""; 
    } 

    jQuery(document).ready(function() { 
    }); 

</script> 

<input type="button" value="Run Web Service" onclick="callWebService();" /> 

這是Web服務:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 
using System.Web.Script.Serialization; 

namespace My.Services 
{ 
    /// <summary> 
    /// Summary description for ProjectDialog 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    [System.Web.Script.Services.ScriptService] 
    public class ProjectDialog : System.Web.Services.WebService 
    { 
     [WebMethod] 
     public string HelloWorld() 
     { 
      return "Hello World"; 
     } 
    } 
} 
+0

看到我的更新。如果你指定'contentType',你將得到一個有效的'json'響應。 – 2011-04-04 15:12:24

回答

0

我能想到的三個選項,這將是有幫助在這種情況下 -

  1. 包括對Web服務的方法此屬性(返回爲JSON而不是XML) -

    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]

  2. Parse the XML在客戶端

  3. 或者使用IHttpHandler而不是Web服務。它們很簡單,使用起來也很簡單。

0

您需要的ScriptMethodAttribute適用於Web服務,並指定ResponseFormat(JSON是默認值)

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string HelloWorld() 
{ 
    return "Hello World"; 
} 

這很可能會是你最好的結果,因爲它似乎要請求的數據作爲JSON反正基於您的.ajax()電話。 注意基於jQuery docs,數據類型應簡單地爲json

通過使用dataType選項可以實現不同的數據處理 。 除了純XML,數據類型可以是 html,json,jsonp,腳本或文本。

更新 如果指定contentType正確,你會得到一個有效的json反應看來。

jQuery.ajax({ 
    cache: false, 
    type: 'POST', 
    complete: onComplete, 
    data: null, 
    contentType: "application/json; charset=utf-8", 
    dataType: 'json', 
    error: onError, 
    success: onSuccess, 
    url: url 
}); 
相關問題