2009-07-22 32 views
1

我試圖在ASP.NET 3.5 Web Forms應用程序中將官方jQuery autocomplete plugin與ASMX Web服務結合使用。如果我理解正確,自動填充插件只能使用HTTP GET調用服務(使用兩個查詢字符串參數:q限制)。我想出瞭如何讓Web服務響應HTTP GET調用,但我無法弄清楚如何讓它返回JSON數據(即使服務返回JSON數據,當我使用jQuery $ .ajax調用type ='POST ',當從自動完成插件調用時,它總是返回XML)。下面是一些代碼片段:如何強制ASMX Web服務在HTTP GET請求上向客戶端發送JSON數據?

Web服務:

[ScriptService] 
[WebService(Namespace = "http://tempuri.org/")] 
public class UserWS: WebService 
{ 
    [WebMethod] 
    [ScriptMethod(UseHttpGet=true, ResponseFormat=ResponseFormat.Json)] 
    public List<UserDisplayInfo> GetUsers 
    (
    string q, 
    int limit 
) 
    { 
    List<UserDisplayInfo>users = GetUsers(q, limit); 
    return users.ToList(); 
    } 
} 

網頁:

$("#test").autocomplete(
    "./Services/UserWS.asmx/GetUsers", 
    { 
    dataType: 'json', 
    type: 'POST', // this setting is ignored 
    contentType: 'application/json;charset=utf-8', 
    parse: function(data) 
    { 
     //... 
    } 
}); 

如果無法做到這一點我不知道什麼會是一個更好的選擇:

  • 修復自動完成插件以使用HTTP POST和JSON數據而不是GET和查詢字符串參數;
  • 使用不同的自動完成插件(我看了幾個,但在這一點上官方插件有大部分建議,我不確定其他插件是否支持HTTP POST);
  • ASMX Web服務的替代方案,如WCF Web服務(我不想使用WCF,因爲ASMX Web服務更容易實現 - 沒有web.config更改,沒有合同,也沒有接口 - 並且它使我我需要的一切);
  • 別的東西。

我在StackOverflow中發現了幾個類似的問題,但是我沒有找到適合我的答案。任何(好)想法?

+0

我無法在插件文檔中找到dataType,type,contentType和parse選項:http://docs.jquery.com/Plugins/Autocomplete/autocomplete#toptions – 2009-07-22 23:46:39

+0

我希望這些會傳遞給jQuery AJAX。 – 2009-07-23 02:34:40

回答

4

自動完成插件需要純文本格式的結果,而不是JSON。每個項目應該是一個獨立的行:

foo\n 
bar\n 
baz\n 

嘗試使用通用處理器(ashx的)替代Web服務:

public class MyHandler : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
    context.Response.ContentType = "text/plain"; 
    context.Response.Write("foo\nbar\nbaz"); 
    } 

    public bool IsReusable 
    { 
    get { return false; } 
    } 
} 

在側面說明,你不能使用,如果你想ASMX網頁GET服務返回JSON。請參閱How to let an ASMX file output JSON

相關問題