是否可以在asp.net MVC中使用提交表单和ajax请求的按钮?

时间:2018-01-20 07:33:16

标签: jquery ajax asp.net-mvc

我已经制作了一个网络抓取工具,它必须检查网站并获得一些添加到数据库中的价值。我已经使用quartz.net在该网站上安排日程安排。因为我的爬虫每20秒就要检查一次。所以,到目前为止我没有问题。但我的问题是,当我想同时提交表单和ajax请求时。我的表单在HomeController中发送索引操作,但我的ajax请求转到GetData中的HomeController操作方法事实上,我的ajax请求必须从GetData动作方法获取最后一个数据。当我点击satrt按钮提交我的表单时,它会提交到索引操作,但是当点击{{1}中定义的相同按钮时代码它将null提交给jquery动作方法。因为在此之前我的表单被提交到Index动作方法,我的Inputs为null。 最后,我想知道如何使用按钮提交我的表单和ajax请求? 或者你的问题解决方案是什么?

  

我已经用过这种方式,但它并不适合这个问题。

     

我改变了类型="提交"到"按钮"我的表格没有提交   索引行动方法。

My Project

GetData
public JsonResult GetData(ScrapJob scrap)
{
    var fetchData = db.Scraps.Where(s => s.Url == scrap.Url && s.Keyword == s.Keyword).Max(s => (int?)s.Id) ?? 0;
    var findData = db.Scraps.Find(fetchData);
    return Json(findData, JsonRequestBehavior.AllowGet);
}
$(function () {
    var timeoutFunction;
    var scrapForm = $("#scrapForm").serialize();
    $("#btnStart").click(function () {
        timeoutFunction = setInterval(function () {
            $.ajax({
                type: "GET",
                url: "/Home/GetData",
                data: scrapForm,
                success: function (data) {
                    var rows = "<tr>" + "<td>" + data.Url + "</td>" + "<td>" + data.Keyword + "</td>" + "<td>" + data.DateTime + "</td>" + "<td>" + data.Count + "<td/>" + "</tr>";
                    $("#scrapTable tbody").append(rows);
                    //alert(data.Url);
                    //console.log(data.Url + ":" + data.DateTime + ":" + data.Keyword + ":" + data.Count);

                }

            });
        }, 1000);
    });

});

1 个答案:

答案 0 :(得分:0)

如果我理解了您的问题,并且您的代码确实正常运行,则此更改将按您的要求执行。使用btnStart按钮:

$(function () {
    var timeoutFunction;
    $("#btnStart").click(function () {
        var scrapForm = $("#scrapForm").serialize();
        $("#scrapForm").submit();
        timeoutFunction = setInterval(function () {
            $.ajax({
                type: "POST",
                url: "/Home/GetData",
                data: scrapForm,
                success: function (data) {
                    var rows = "<tr>" + "<td>" + data.Url + "</td>" + "<td>" + data.Keyword + "</td>" + "<td>" + data.DateTime + "</td>" + "<td>" + data.Count + "<td/>" + "</tr>";
                    $("#scrapTable tbody").append(rows);
                    //alert(data.Url);
                    //console.log(data.Url + ":" + data.DateTime + ":" + data.Keyword + ":" + data.Count);

                }

            });
        }, 1000);
    });

});

PS:您的GetData期待一个对象,您无法通过GET请求传递对象。将方法的HTTP方法更改为POST

[HttpPost]
public JsonResult GetData(ScrapJob scrap)
{
    var fetchData = db.Scraps.Where(s => s.Url == scrap.Url && s.Keyword == s.Keyword).Max(s => (int?)s.Id) ?? 0;
    var findData = db.Scraps.Find(fetchData);
    return Json(findData, JsonRequestBehavior.AllowGet);
}

您可能需要使用JSON.stringify(scrapForm)来发送数据

如果您想使用GET请求,请更改方法签名以分别接受UrlKeyword,然后传递您的请求 "/Home/GetData?url=urlValue&keyword=keywordValue"