申し訳ありませんが、以前は見たことのない少しの問題があり、実際には再現できません。私は数字を入力するテキストボックスを持っているし、押されたときにajaxコールを行うボタンを持っています。これは私のコントローラ内のアクションを呼び出し、テキストボックスの値でデータベースを更新します。問題は、デバッグが動作することがありますが、動作しない場合があります。コントローラー内のアクションにブレークポイントを置くことができ、常にヒットするわけではありませんが、アクションが呼び出されなくても、ajaxからの成功呼び出しはまだ実行されます。通常、デバッガが起動してから最初の数回は動作しますが、それは停止し、ページを更新しても問題ありません。 ChromeやVisual Studioではエラーは表示されません。私はIntellitraceで何かを見つけることができたかどうかを知ろうとしたが、運がなかった。AJAXは常にコントローラーのアクションを呼び出すとは限りませんが、常に成功を処理します。
これは私のアクションです:
[HttpPost]
public JsonResult UpdateIncremental(int QueryID, int? Incremental)
{
Datamart_MedsDBContext DBContext = new Datamart_MedsDBContext();
ss_Queries query = DBContext.ss_Queries.FirstOrDefault(m => m.QueryID == QueryID);
query.IncrementalLookBack = Incremental;
query.UpdatedBy = "CHMCCORP\\" + Session["UserName"].ToString();
query.UpdatedOn = System.DateTime.Now;
DBContext.ss_Queries.Attach(query);
DBContext.Entry(query).State = System.Data.Entity.EntityState.Modified;
DBContext.SaveChanges();
return Json(true, JsonRequestBehavior.AllowGet);
}
ビュー:
<input type="text" id="Incremental" value="@ViewBag.Incremental" />
<input id="editIncremental" type="button" name="editIncremental" value="Update" />
アヤックス:
$("#editIncremental").on("click", function() {
var reg = /(^$)|(^[0-9]*$)/;
var incremental = $('#Incremental').val();
var valid = reg.test(incremental);
var queryID = "@Session["QueryID"]";
if (!valid) {
alert("The incremental load must be a number!");
} else {
$.ajax({
type: "POST",
url: '@Url.Action("UpdateIncremental", "Home")',
data: {
QueryID: queryID, Incremental: incremental
},
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (data) {
if (data == true) {
alert('Incremental Lookback has been updated!')
//window.location.reload();
}
else {
alert('There is some error');
}
}
});
}
});
私はこれが可能になることを知っています再現性がなく保証されていないため、痛みがあります。私はちょうど正しい方向へのポイントを探しています。
は、 'contentType: 'application/jsonを設定するときにデータを文字列化する必要があります。 charset = utf-8''それ以外の場合はjQueryはuriEncodeそれを – charlietfl
運がありません。しかし、他のajaxは、このような問題を抱えてはならないように機能します。 –
AJAXのようなサウンドがキャッシュされています。あなたの '$ .ajax'呼び出しに' cache:false'オプションを追加してみてください。 –