【问题标题】:unable to execute javascript jquery function无法执行javascript jquery函数
【发布时间】:2012-03-15 05:17:36
【问题描述】:

我有一个通过回调方法实现的 Jquery 自动完成功能。但是它似乎没有运行。

这是我的代码:

在客户端:

<script type="text/javascript">

$(document).ready(function() { 
                alert("hi");
                 $("#Text1").autocomplete({
                     minLength: 0,
                     source: function (request, response) {
                         $.ajax({
                             type: "POST",
                             contentType: "application/json; charset=utf-8",
                             url: 'BlissMaker.aspx/GetNames',
                             data: "{ 'sname':'" + request.term + "' }",
                             dataType: "json",
                             dataFilter: function (data) { return data; },
                             success: function (data) {
                                 if (data.d != null) {
                                     response($.map(data.d, function (item) {
                                         return {
                                             label: item.Name,
                                             value: item.Id
                                         }
                                     }))
                                 }
                             },
                             error: function (XMLHttpRequest, textStatus, errorThrown) {
                                 alert(XMLHttpRequest.responseText);
                             }
                         });
                     },
                     focus: function (event, ui) {
                         $("#Text1").val(ui.item.label);
                         return false;
                     }
                 })
                    .data("autocomplete")._renderItem = function (ul, item) {
                        return $("<li></li>")
                            .data("item.autocomplete", item)
                            .append("<a><img src='" + item.icon + "' width='32' height='32' />  " + item.Name + "</a>")
                            .appendTo(ul);
                    };
            }
</script>

在代码隐藏处:

[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<States> GetNames(string sname)
{
    List<States> sbStates = new List<States>();
    con = new SqlConnection("Data Source=PRATEEK\\SQLEXPRESS;Initial Catalog=BD;Integrated Security=True;Pooling=False");
    con.Open();

Me mee = (Me)Session["Me"];

qr = "SELECT FBFriends.FB_Id2, ActiveInfo.Name, ActiveInfo.Profile_Pic, ActiveInfo.Gender FROM [FBFriends],[ActiveInfo] WHERE FBFriends.FB_Id1='" + mee.Id + "' AND ActiveInfo.FB_Id=FBFriends.FB_Id2";
ds = new DataSet(qr);
da = new SqlDataAdapter(qr, con);
da.Fill(ds);

ds.Tables[0].Select(ds.Tables[0].Columns[1].ColumnName + " Like '%" + sname + "%' and " + ds.Tables[0].Columns[3].ColumnName + " = 'Female'");

foreach (DataRow row in ds.Tables[0].Rows)
{
    States st = new States();
    st.Id = row.ItemArray[0].ToString();
    st.Name = row.ItemArray[1].ToString();
    st.Value = row.ItemArray[1].ToString();
    st.Icon = row.ItemArray[2].ToString();
    sbStates.Add(st);
}

    return sbStates;
}

似乎自动完成功能没有像 Alert() 一样被调用。 关于如何调用它的任何建议?

添加: 检查堆栈跟踪后,它给了我一个错误

未知方法名称 GetNames

有什么建议吗?

【问题讨论】:

  • 可以在控制台输出返回的数据对象吗?只是为了确保回调成功被调用。
  • 为什么你不打开 javascript 错误来查看错误,然后再把它们带到这里?
  • @vini 结合我们所有 3 个答案,jk. 表示存在多个语法错误(其中一个是缺少括号 Marcin Necsord Szulc提出)你需要修复。然后将 data: 部分中的字符串文字替换为名为 dataToSend 的变量(或任何您希望调用的变量)。然后运行它,它应该在这一切之后工作。
  • 对不起,它不起作用。我相信我的回调没有被调用。我跟踪但给出了未知的方法 GetNames

标签: javascript jquery asp.net jquery-ui autocomplete


【解决方案1】:

谢谢大家。我终于明白了我的错误。 Web 方法必须是 Static 才能调用它,并且表单中包含的 ScriptManager 必须是 EnablePageMethods=true

我的代码现在一切正常。非常感谢:)

【讨论】:

    【解决方案2】:

    $(document).ready() 会被调用吗?如果没有,你是在一个单独的文件中的 javascript 吗?如果是这样,则文件本身可能无法访问,甚至没有调用 ready() 函数。检查 &lt;script src=""&gt;&lt;/script&gt; 标记以包含 JQuery 文件和您的 javascript 文件。

    【讨论】:

      【解决方案3】:

      我不确定这是否会导致您的问题,但我在您的 JQuery $.ajax 电话中注意到您在这里有这行:

      data: "{ 'sname':'" + request.term + "' }",

      如果我在 $.ajax 调用的 data: 字段中连接变量和字符串,我发现 ajax 调用会失败。

      试试这个:

      在调用之外声明一个变量,如下所示:

      var dataToSend = "{ 'sname':'" + request.term + "' }";

      然后将data: 字段更改为:

      data: dataToSend,

      这可能会也可能不会解决您的问题,但它看起来更好!还是试试吧!

      【讨论】:

        【解决方案4】:

        尝试清理代码错误并再次运行:

        Problem at line 19 character 43: Missing semicolon.
        }
        
        Problem at line 20 character 41: Missing semicolon.
        }))
        
        Problem at line 39 character 13: Expected ')' and instead saw ''.
        }
        
        Problem at line 39 character 13: Missing semicolon.
        }
        

        【讨论】:

        • 这只是粘贴代码的问题。否则一切都很好。我要求逻辑错误
        • @vini 你说:It seems that autocomplete function is not getting called as well as Alert(). Any suggestions on how to call it? 编码错误是为什么你的alert 没有被触发并且autocomplete 没有被调用。你问为什么没有。如果代码不运行,您将无法解决逻辑错误。
        • 我相信你把这个问题理解为错误的意思。该函数没有被调用意味着它没有显示任何结果,也没有对我在代码隐藏中应用的断点做出反应。但是我承认我没有检查说未知方法的 Intellisense。现在你能帮我解决这个问题吗?
        • @vini 我把它完全按照写的。你说it doesn't seem to run,然后问怎么调用autocomplete函数。我回答了这个问题,然后被否决了。不知道那是怎么回事。现在你在事后澄清一些事情。
        • 我已经找到了一个解决方案,抱歉我很粗鲁
        【解决方案5】:

        你忘记了结尾“)”;

        $(document).ready(function() {
        })
        

        修复该部分后,检查firebug等控制台中的响应和请求。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-09-08
          • 2014-02-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-29
          • 2018-04-08
          相关资源
          最近更新 更多