我有这段代码,如果我在代码后面设置一个断点并让值变为零并继续运行其余的代码,那么它可以正常工作。
然而,如果我没有设置断点并让它运行并且值将变为2并且中断,它将会中断。
有谁知道为什么?当用户在文本框中输入内容时,将触发下面的AJAX代码。
function getmachineinfo(serial) {
$.ajax({
url: '@Url.Action("actionname", "controller")',
type: "POST",
data: { "serial": serial },
success: function (data) {alert('success')}, error: function (err) {
alert(err)
}}
public JsonResult getmachine(string serial)
{
var machine= service.GetWarrantyDetailsBySerial(serial);
result.AccessoriesWs = new List<AccessoriesW>();
//set break point here and let the result.AccessoriesW to be re declared and set to 0 and it will works.if i don set break point.result.AccessoriesW will not have enough time to reset to zero.
return Json(machine, JsonRequestBehavior.AllowGet);
}
Javascript错误
在序列化类型为
的对象时检测到循环引用
结果是父对象,而AccessoriesW是子对象重置子对象不会出现任何错误。
更新解决方案
而不是使用
result.AccessoriesWs = new List<AccessoriesW>();
我把它改成下面,问题解决了。我认为重新声明构造函数对于ajax来说太慢了。
result.JuraAccessoriesWs.Clear();
答案 0 :(得分:1)
结果看起来像一个实例(非本地)变量......它可能被同一个控制器中的其他调用覆盖了?你是否同时进行其他AJAX通话?
要注意计时,你应该在本地构造结果对象,以便在操作过程中不被其他代码更改。
答案 1 :(得分:0)
好吧我认为答案实际上是导致问题的javascript事件。
$("#Q_Serial").on('keyup paste', function (e) { var code = (e.keyCode ? e.keyCode : e.which); var artno = $("#Q_Serial").val(); if (artno.length==14) { getmachineinfo(artno); } });
keyup和paste都会同时触发ajax。删除&#39;粘贴&#39;也解决了这个问题。谢谢米尔尼帮我说清楚。否则我会遇到上面的愚蠢解决方案。