我有一个简单的看法。用户在上一页上填写一个表单,然后提交Ajax表单。该表格可以验证所有内容(包括付款)是否良好。如果不是,它将停留在同一页面上,并显示一个错误(因此为AJAX),但是如果它很好,则它将通过以下方式重定向到确认页面:
var url = '@Url.Action("PYGConfirmationPost", "PYG")';
将加载如下图所示的视图。下拉菜单包含上一个屏幕中添加的所有电子邮件。因此非常简单。页面上只有jQuery / JavaScript的三件事。一种是谷歌分析。其他两个在图片下方。
//Prevents user from going back to the form. Used and works on many Views.
history.pushState("", "", "../Home/Index")
//auto submit in 30 seconds
$(document).ready(function () {
setTimeout(function () {
$("#PreSubmit").trigger('click');
}, 30000);
});
//After 30 seconds, submit GA and then submit the form.
$('#PreSubmit').click(function () {
//Submit google analytics here
$("#submit").trigger('click');
});
这是它调用的方法。我在顶部和“ return RedirectToAction”处设置了一个断点。由于某种原因,一旦到达返回Redirect下方的方括号(}),它将跳回到顶部并重新开始该方法。 编辑:我删除了除返回RedirectToAction之外的所有内容,并且它仍在执行循环。
[RequireAuth]
[HttpPost]
public ActionResult PYGConfirmationPost(PYG SignUp)
{
//EDIT: The code in the controller isn't the issue. I deleted everything except for the return statement and it still does the strange loop.
return RedirectToAction("Index", "Home");
}
它始终会运行方法2x,但是如果我逐步执行它,它将在2-6x范围内进行。我通常会在6倍后放弃,因此可能会做得更多。一次,它只执行一次该方法。
我尝试将RedirectToAction移动到OperationKillTheCookies()下,但没有解决。我尝试将RedirectToAction更改为View,但它没有解决。
我当时在想,也许jQuery的时间限制正在影响它,但是无论循环允许多快或多慢,它的行为都一样。
编辑我使用硒Web驱动程序(特别是chrome驱动程序)创建了一个测试。运行测试方法时,该方法不会循环。
编辑2 并非每台计算机都执行此操作。另外2个人试用了它,并且每次都能按预期工作两次。但是,有2个人尝试过它,并且发射了太多次。我不知道问题可能是什么。
答案 0 :(得分:0)
感谢Jrud给了我寻找“解决方案”的灵感。我不知道它怎么了,但是我找到了解决方法。我将触发器(单击)更改为仅单击()。没有解决它。将其放在$(document).ready()中。结果相同。
但是,如果我将Google Analytics(分析)内容放到点击之外的功能中,那么它将起作用。根据GA文档,Google Analytics(分析)代码不会执行任何操作,只能提交给Google Analytics(分析)。因此,没人知道确切的原因是什么。
奇怪的是,它看起来好像没有从客户端触发两次。看起来它在控制器中循环了方法,这与jQuery或GA无关。因此,基本上是由女巫引起的。
$(document).ready(function () {
eCommerce();
setTimeout(function () {
$("#PreSubmit").click();
}, 30000);
//send eCommerce and then submit the form because I have zero idea how to use Google Analytics and this feels right.
$('#PreSubmit').click(function () {
$("#submit").click();
});
});
答案 1 :(得分:0)
也许添加
template <auto Pred, class Type, Type... I>
struct filter_integer_sequence_impl
{
template <class Tuple, size_t... J>
static constexpr auto Unpack(std::index_sequence<J...>)
{
return std::integer_sequence<Type, std::tuple_element_t<J, Tuple>::value...>();
}
template <Type Val>
using Keep = std::tuple<std::integral_constant<Type, Val>>;
using Ignore = std::tuple<>;
using Tuple = decltype(std::tuple_cat(std::conditional_t<Pred(I), Keep<I>, Ignore>()...));
using Result = decltype(Unpack<Tuple>(std::make_index_sequence<std::tuple_size_v<Tuple>>()));
};
template <auto Pred, class Type, Type... I>
constexpr auto filter_integer_sequence(std::integer_sequence<Type, I...>)
{
return typename filter_integer_sequence_impl<Pred, Type, I...>::Result();
}
至$('#PreSubmit')。click():
constexpr bool IsEven(int val)
{
return (val % 2) == 0;
}
constexpr auto start = std::integer_sequence<int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9>();
constexpr auto filtered = filter_integer_sequence<IsEven>(start);
constexpr auto expected = std::integer_sequence<int, 0, 2, 4, 6, 8>();
static_assert(std::is_same_v<decltype(filtered), decltype(expected)>);
为什么不将对GA的单独调用作为其自身功能?
return false;