2009-07-22 34 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

相关问题