c# - 单独刷新 ASP.NET MVC 中表中的每一行

标签 c# javascript jquery ajax asp.net-mvc

我正在努力解决刷新 ASP MVC 应用程序中表中每一行的问题。

我有一个对象列表,其中每个对象都包含一个 url 和刷新时间。应用程序应提供一个表,其中每一行代表列表中的每个对象。对于每一行,它必须检查 url 是否仍然可用。每行有不同的刷新时间。

我的问题是我不知道如何使用 JavaScript 来做到这一点。我尝试使用 jQuery、Ajax 但失败了。我知道如何使用 Js 刷新所有表,但如何分别使用不同的刷新时间刷新每一行?

最佳答案

如果您有下表:

<table border=1>
    <thead>
        <td class="url">Url</td>
        <td class="interval">Interval</td>
        <td class="status">Status</td>
    </thead>
    <tbody>
        <tr>
            <td class="url">http://www.google.com</td>
            <td class="interval">2000</td>
            <td class="status"></td>
        </tr>
        <tr>
            <td class="url">http://www.bing.com</td>
            <td class="interval">5000</td>
            <td class="status"></td>
        </tr>
    </tbody>
</table>

您可以使用以下 jQuery 代码片段单独更新每一行:

$("tbody tr").each(function () {
    var row = $(this);
    var interval = row.find(".interval").text();
    setInterval(function(){updateRow(row);}, interval);
});


function updateRow(row) {
    var url = row.find(".url").text();
    var statusCell = row.find(".status");

    statusCell.text("last checked: " + new Date().toLocaleString());

    var checking = $.post('/api/statuses', { "": url });

    checking.done(function (data) {
        var responding = data;
        if (responding) {
            statusCell.css("background", "green");
        } else {
            statusCell.css("background", "red");
        }
    });
}

也可通过 http://jsfiddle.net/hummlas/pyh9c/ 获取

实际的状态检查有点复杂,但由于不允许进行跨域 ajax 调用,您可以通过使用代理来解决这个问题,例如创建一些服务器端代码来执行状态检查,然后您只需使用 ajax 使用您想要获取其状态的 url 调用您的代理。

编辑:

我添加了使用 ASP.NET Web API Controller 的状态检查代理服务的示例实现

public class StatusesController : ApiController
{
    [HttpPost]
    public bool Post([FromBody]string value)
    {
        return CheckStatus(value);
    }

    private bool CheckStatus(string url)
    {
        var request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "HEAD"; //only retrieve headers

        HttpWebResponse response;
        try
        {
            response = (HttpWebResponse)request.GetResponse();
        }
        catch (WebException e)
        {
            response = (HttpWebResponse) e.Response;   
        }

        var responseCode = (int)response.StatusCode;
        return responseCode < 400; //erroneus response codes starts at 400
    }

}

关于c# - 单独刷新 ASP.NET MVC 中表中的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15998152/

相关文章:

javascript - 提交按钮的单击事件在 Controller 方法返回值之前首先执行

javascript - 如何将字符串值转换为 Json

c# - C# 中的二进制序列化 - 附加到文件

c# - 如何计算 Linq 查询中一系列整数的运行总和?

javascript - 计算字符串在数组中出现的次数并与另一个数组进行比较

javascript - 想要一个按钮在用户点击时改变颜色和改变文本

javascript - Phonegap 解析外部 HTML

c# - 如何使用 TcpClient 类在 WCF 中获取超时异常

c# - Resourcemanager 返回相同的资源,尽管指定了 CultureInfo

javascript - 使用 jQuery 以增量方式更改背景位置