【问题标题】:ajax jquery post, needs some fine tuning for a beginnerajax jquery post,需要对初学者进行一些微调
【发布时间】:2012-03-20 20:10:10
【问题描述】:

我是 javascript 和 jquery 的新手,作为大学项目的一部分,我需要定期检查数据库以查看是否有更改。如果有更改,我希望该更改的结果向屏幕“警告”,以证明 AJAX 调用正在工作。我正在使用 asp.net 和 c#。

我的场景是:用户“A”登录并在由全局列表填充的列表框中看到用户“B”。 “A”点击“B”并点击播放按钮。当这种情况发生时,数据库中用户表中的“B”被邀请列更改为“A”。这就是我的问题所在,我希望有一个脚本可以定期访问我的 UserDAO.cs 类中的 web 方法——它有一个查询数据库中的被邀请列的方法(这已经过测试并且有效)。我无法让这个工作,有人可以看看,看看他们是否能发现任何东西。非常感谢所有帮助!

DBPolling.js

    $(document).ready(function () {
function ajaxRequest() {
    $.ajax({
        type: "POST",
        url: "UserDAO.cs/queryInvitedBy",// is this correct way to input url?
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (resultData) {
            //console.log(result);// i found this in an example...needed?
            if (resultData.status == 'pending') {
                setTimeout(function () { ajaxRequest(); }, 5000); // wait 5 seconds than call ajax request again
            } else {
                var result = eval(resultData);
                alert("You have been invited" + result);
            }
        }
    });
}

});

UserDAO.cs

[WebMethod]
    public string queryInvitedBy()
    {
        // New user
        User user;

        // Open the NHibernate session
        ISession session = NHibernateHttpModule.CurrentSession;

        IQuery q = session.CreateQuery(
            "FROM User WHERE InvitedBy IS NOT NULL");
            // Assign values to the ? placehoders, by their index (0,1, etc.)

        // Make sure List is not empty
        if (q.List<User>().Count > 0)
            // set user to first item in List
            user = q.List<User>()[0];
        else
            // set user to null if none found
            user = null;

        // If no users found, returned user will be blank, otherwise the valid user
        string result = user.InvitedBy.ToString();
        return result;
    }

我一直在关注在线教程并查看与我类似的 Q 以达到这一点,所以如果我走在正确的轨道上,请告诉我,或者如果您发现任何问题,请提供解决方案。

【问题讨论】:

  • +1 获取详细的问题和完善的代码

标签: c# jquery asp.net ajax json


【解决方案1】:

调用您的 .aspx 页面,而不是背后的代码。

url: "UserDAO.aspx/queryInvitedBy",

【讨论】:

  • 感谢您的回复。我没有 UserDAO.aspx 页面。 UserDAO.cs 是一个 App_Code 类,我可以在其中执行基本数据操作,如插入、更新等。该方法是否需要在 .cs 文件中,或者我应该将其移动到其他地方,它自己的 .aspx 页面可能吗?
  • TCC 是对的,即使 UserDAO 不是页面,也不能调用 .cs 文件。这些是在运行时编译的,不能从 javascript 调用,你需要有一个 url 来调用,它将你的请求定向到你所追求的方法
  • 好的,我知道我无法调用 .cs 文件,实现你们建议的最佳方法是什么?我只是觉得有点混乱,因为我需要参考 System.Web.Services、Nhibernate 等内容。
  • 使用 UserDAO.cs 或您选择的任何名称创建一个新的 UserDAO.aspx 页面。将您的 [WebService] 方法复制到后面的新 UserDAO.cs 代码中。也可以参考 System.Web.Services。
【解决方案2】:

据我所知,您的问题是一遍又一遍地调用该函数。

你可以在你的javascript中定义一个全局定时器变量

var timer;

并创建一个函数

function check(){
clearTimeout(timer);
//do the ajax thing here

timer=setTimeout('check()',5000);
}

现在,当你想调用函数时使用

timer=setTimeout('check()',5000);

它应该每 5 秒工作一次......

这是你需要的吗?

【讨论】:

  • 感谢您的回复。你是什​​么意思'一遍又一遍地调用函数'?这就是我想做的。我希望此脚本每 5 秒使用一次(通过短轮询)UserDAO 中的 Web 方法,以查看登录用户的受邀者列是否已更改,如果已更改,则向屏幕发出警报:(“您已被邀请" + 结果)。我还没有让它工作,正如我所说的,我是 jquery、javascript 和 ajax 调用的新手——所以我希望有人能仔细检查并指出我做错了什么。
猜你喜欢
  • 2012-04-26
  • 1970-01-01
  • 2021-01-09
  • 2022-07-31
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 2017-08-17
  • 2021-12-02
相关资源
最近更新 更多