【问题标题】:Select2 With Ajax Asp.net 4.0 webmethod RequestSelect2 与 Ajax Asp.net 4.0 webmethod 请求
【发布时间】:2014-01-17 17:18:50
【问题描述】:

我正在尝试从一个非常简单的网络方法(仅用于测试)驱动 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 - 该示例适用于该示例。我显然遗漏了一些明显的东西。

【问题讨论】:

  • 当您在服务器代码和 javascript 中单步调试调试器时会发生什么?服务器是否发回任何东西;它是什么样子的?尝试观看 Fiddler2 中发生了什么?
  • 我也想这样做。可悲的是 Select2 创建了一个查询字符串,我认为您对此无能为力:(
  • 我确实解决了这个问题。把你的情况发给我,我看看能不能帮忙。稍后我也会发布我的解决方案

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


【解决方案1】:

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

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

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】:

    试试这个:

    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: '&lt;%= ResolveUrl("~/mypage.aspx/getResults") %&gt;'

    而不是:url: "mypage.aspx/getResults"

    【讨论】:

      【解决方案3】:

      用于 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/

      【讨论】:

      • 我确实尝试过静态 - 它没有任何区别 - 我忘了在我原来的帖子中提到这一点。道歉。
      猜你喜欢
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 2021-07-24
      • 2019-01-24
      • 2011-10-23
      • 1970-01-01
      相关资源
      最近更新 更多