2011-09-20 44 views
3

我有一個ASP.Net網頁嘗試使用jquery .axax方法從asmx webservice檢索數據。當dataType =「text」時,ajax方法可以正確調用成功方法,但是當使用「json」的dataType時,我無法得到它。任何人都可以看到我缺少的東西嗎?我得到了 'JSON' 例如在網上http://weblogs.asp.net/jaredroberts/archive/2009/08/28/great-article-on-cascading-dropdown-list-and-jquery.aspx使用jQuery .ajax,當使用jQuery'json'vs'text'時不調用成功方法

客戶:

function getText() { 
    alert("getText"); 
    $.ajax({ 
     type: "POST", 
     url: "test.asmx/HelloWorld", 
     dataType: "text", 
     success: function(response) { alert("text"); } 
    }); 
} 

function getJson() { 
    alert("getJson"); 
    $.ajax({ type: "POST", 
     url: "test.asmx/HelloWorld", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(response) { alert("json"); } 
    }); 
} 

Serverside集團Web服務調用:

[WebMethod] 
public string HelloWorld() { 
    return "Hello World"; 
} 
+1

您需要將json編碼爲「hello world」。 –

回答

2

最後,我的問題的來源是在類裝飾缺乏[ScriptService]屬性。我改類declartion到:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ScriptService] 
public class SearchFilters : System.Web.Services.WebService { 
    [WebMethod] 
    public string HelloWorld() { 
     return ""; 
    } 
} 

使用招我發現返回以下錯誤信息:

只有Web服務與類 定義一個[ScriptService]屬性可以從腳本中調用

1

,因爲當你聲明的數據類型爲json,jQuery的期待您的通話將失敗JSON作爲結果,但您返回Hello World。請嘗試下面的代碼,而不是打印"Hello World",這是有效的JSON。

public string HelloWorld() { 
    return """Hello World"""; 
} 
+0

這似乎沒有工作:返回「\」Hello World \「」; – davewilliams459

+0

對不起 - 我根本不知道VB,並假定它支持它沒有的轉義功能。我修改了我的答案。 – cheeken

+0

其實這是c#,但上述仍然無法正常工作。雖然謝謝! – davewilliams459

1

這裏是我嘗試它完美地工作:

客戶:

<script type="text/javascript"> 
    $(function() { 
     $('#testbutton').click(function() { 
      $.ajax({ 
       type: "POST", 
       url: "WebService1.asmx/HelloWorld", 
       cache: false, 
       contentType: "application/json; charset=utf-8", 
       data: "{}", 
       dataType: "json", 
       success: function (data, status) { 
        var response = $.parseJSON(data.d); 
        alert(response.message); 
        alert(status); 
       }, 
       error: function (xmlRequest) { 
        alert(xmlRequest.status + ' \n\r ' + xmlRequest.statusText + '\n\r' + xmlRequest.responseText); 
       } 
      });    
     }); 
    }); 
</script> 

Serverside集團Web服務調用:

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

namespace WebApplication2 
{ 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)]  
    [System.Web.Script.Services.ScriptService] 
    public class WebService1 : System.Web.Services.WebService 
    {  
     [WebMethod] 
     public string HelloWorld() 
     { 
      return "{ \"message\":\"Hello World\" }"; 
     } 
    } 
} 

請確保您有[System.Web.Script.Services.ScriptService]屬性對你的web服務類。

注意:在返回的JSON上面的例子是硬編碼的,但你可以很容易地序列化要返回的JSON爲一個虛構的人物對象如下的對象:

Person p = new Person(); 
p.FirstName = "Bob"; 
p.LastName = "Smith"; 
p.Age = 33; 
p.Married = true; 

Microsoft.Web.Script.Serialization.JavaScriptSerializer jss = new Microsoft.Web.Script.Serialization.JavaScriptSerializer(); 
string serializedPerson = jss.Serialize(p); 
+0

恐怕這不起作用,因爲我在銀行,我無法加載FF。然而,我真的想要完成上述文章正在做什麼,那麼爲什麼這是行不通的:public List GetCases(){List cases = new List (){new Cases(){CaseName =「test」}}; return cases.ToList(); } – davewilliams459

+0

(抱歉的格式)在上面的例子中,我使用jQuery的GetCases調用通過'json'(和'text')調用'GetCases'webmethod。 GetCases返回列表。然而,如上所述,'text'返回結果,但'json''success'方法從不會觸發。我是否從列出的MS文章中找到一些內容? – davewilliams459

+0

@ davewilliams459你需要看看你的服務的迴應是什麼。您可以使用谷歌瀏覽器,它具有類似於Firebug的工具,或者爲Internet Explorer安裝Fiddler,並使用它來分析您的Ajax請求。但首先,肯定會看到正在發送的內容以及爲了進一步調試而回來的內容。 –

0

你的類必須具有屬性:[ScriptService] 然後聲明方法:

[WebMethod] 
    public string GetSomeString() 
    { 
     return "SomeString"; 
    } 

當你試圖處理來電:

function ShowString() { 
     $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "/YourService.asmx/GetSomeString" , 
      data: "{}", 
      dataType: "json", 
      success: function (msg) { 
       console.debug(msg); 
       alert(msg.d); 
      } 
     }); 

會給你正確的輸出什麼,你期待「SomeString」。

-Raj