我已经制作了一个网络抓取工具,它必须检查网站并获得一些添加到数据库中的价值。我已经使用quartz.net在该网站上安排日程安排。因为我的爬虫每20秒就要检查一次。所以,到目前为止我没有问题。但我的问题是,当我想同时提交表单和ajax请求时。我的表单在HomeController
中发送索引操作,但我的ajax请求转到GetData
中的HomeController
操作方法事实上,我的ajax请求必须从GetData
动作方法获取最后一个数据。当我点击satrt按钮提交我的表单时,它会提交到索引操作,但是当点击{{1}中定义的相同按钮时代码它将null提交给jquery
动作方法。因为在此之前我的表单被提交到Index动作方法,我的Inputs为null。
最后,我想知道如何使用按钮提交我的表单和ajax请求?
或者你的问题解决方案是什么?
我已经用过这种方式,但它并不适合这个问题。
我改变了类型="提交"到"按钮"我的表格没有提交 索引行动方法。
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);
});
});
答案 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
请求,请更改方法签名以分别接受Url
和Keyword
,然后传递您的请求
"/Home/GetData?url=urlValue&keyword=keywordValue"