选择2使用Ajax Asp.net 4.0 webmethod请求

时间:2013-12-30 19:22:15

标签: c# jquery asp.net jquery-select2

我正在尝试从一个非常简单的Web方法驱动select2组合框(仅用于测试),但似乎没有任何效果。我试过静电,没有静电 - 没有快乐。

    [WebMethod]
    [ScriptMethod(ResponseFormat=ResponseFormat.Json)]
    public static String getResults(String q, String page_limit)
    {
        return "{'id':'1','text':'test'}";
    } 

这是Jquery

$("#myHiddenField").select2({
            placeholder: "Search for item",
            minimumInputLength: 3,
            ajax: {
                url: "mypage.aspx/getResults",
                dataType: 'json',
                type: "POST",
                params: {
                    contentType: 'application/json; charset=utf-8'
                },
                quietMillis: 100,
                data: function (term, page) { 
                    return JSON.stringify({ q: term, page_limit: 10 });
                },
                results: function (data) {
                    return { results: data };
                }
            }
        });

我不能为我的生活弄清楚。有什么想法或建议吗?

编辑

我正在关注'SELECT2'插件的示例,更具体地说是'带有远程数据部分的无限滚动'see here - 这与示例一起工作正常。我显然错过了一些明显的东西。

3 个答案:

答案 0 :(得分:2)

试试这个:

ajax: {
    url: '<%= ResolveUrl("~/mypage.aspx/getResults") %>',
    dataType: 'json',
    type: "POST",
    params: {
        contentType: 'application/json; charset=utf-8'
    },
    quietMillis: 100,
    data: function (term, page) {
        return JSON.stringify({ q: term, page_limit: 10 });
    },
    results: function (data) {
        console.log(data);
        return { results: data };
    }
}

使用:url: '<%= ResolveUrl("~/mypage.aspx/getResults") %>'

代替:url: "mypage.aspx/getResults"

答案 1 :(得分:2)

我知道这是一个老问题,但是我在谷歌搜索问题,发现了这个问题,修复了它,认为其他谷歌搜索可能会遇到同样的问题。

所以,要解决这个问题,请替换它;

public static String getResults(String q, String page_limit)
{
    return "{'id':'1','text':'test'}";
}

......用这个:

public static String getResults(String q, String page_limit)
{
     return "[{ \"id\": \"1\", \"text\": \"test\" }]";
}

另外,替换它;

results: function (data) {
        return { results: data };
}

......用这个:

 results: function (data) {
      return { results: JSON.parse(data.d) };
 }

答案 2 :(得分:0)

用于WebMethods的方法应为static。点击此处http://encosia.com/why-do-aspnet-ajax-page-methods-have-to-be-static/

了解更多详情

修改

您似乎正在将data属性设置为函数对象,然后可能将其序列化为一个字符串(结果可能是函数体)?而不是将其设置为普通字符串

尝试将其更改为:data: JSON.stringify({ q: term, page_limit: 10 });

此外,results财产的目的是什么?我不知道它,似乎无法在jQuery的文档中找到它:http://api.jquery.com/jquery.ajax/