【问题标题】:Ajax call never returnsAjax 调用永远不会返回
【发布时间】:2015-05-08 08:31:31
【问题描述】:

我有以下 ajax 调用:

$.ajax({
            type: "POST",
            url: urlToGetRules,
            data: { ruleName: ruleName},
        })
             .success(function (data) {
                 document.location.href = "/StudentRules/GetAllStudentRules?productId=test";
             })
             .fail(function (xhr) {
                 alert("Something went wrong!!!")
                 console.log(xhr.responseText);
             });

在我的控制器中,我正在 DocDb 中创建一个文档,如下所示:

[HttpPost]
public ActionResult UpsertDoc(string ruleName)
{
            StudentRule studentRule = new StudentRule() { Id = Guid.NewGuid().ToString(), StudentId = "test", Name = ruleName, RuleType = "Allow all updates", StartDate = DateTime.UtcNow.ToString() };
            _updateScheduleRulesManager.UpsertScheduleRule(studentRule);

            return Json(new { success = true });
}

这个想法是在用户在“添加规则”页面中创建新规则后返回到我列出所有规则的页面。

上面的代码执行得很好,我可以在 Docdb 中看到预期的文档,但是在开发者工具中这个调用的状态显示为 'pending'!!! Success 中的代码永远不会执行。

有人可以在这里指导我吗?

提前致谢。

【问题讨论】:

  • 调试控制器方法时会发生什么?它有没有打到return 行?
  • 它确实击中了控制器。
  • 不管是否命中控制器,能不能在return这一行下断点,是否命中?可能是挂起的更新语句。
  • 如果我删除你的数据库更新代码并且只保留 return Json(new { success = true });那么您的代码工作正常,所以看起来您的更新代码中有一些错误。
  • @mattytommo 你又来了? :)

标签: jquery asp.net ajax asp.net-mvc asp.net-mvc-4


【解决方案1】:

没有.success 处理程序。

弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调从 jQuery 1.8 开始被弃用。准备 您最终删除的代码,请使用 jqXHR.done()、jqXHR.fail()、 和 jqXHR.always() 代替。

你需要使用done:

  $.ajax({
        type: "POST",
        url: '@Url.Action("UpsertDoc")',
        data: { ruleName: 'test'},
        }).done(function (data) {
            document.location.href = "/StudentRules/GetAllStudentRules?productId=test";            
        }).fail(function (xhr) {
        alert("Something went wrong!!!")
        console.log(xhr.responseText);
        });

同时删除.done.fail 之前的空格。

屏幕截图

【讨论】:

  • 我认为这是 OP 代码上的一些狡猾的括号(认为这是一个粘贴错误),没有意识到他正在使用这种语法!好地方;)
  • 那是一个“好地方”吗?除了个人审美之外,它有什么实际区别吗?
  • @ToddGrigsby jQuery 的版本没有success 方法,所以它永远不会工作。弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调从 jQuery 3.0 开始被删除。您可以使用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always() 代替。api.jquery.com/jquery.ajax
【解决方案2】:

我认为有问题你不是 passinb productid 在请求中检查这个在 ajax 调用中

data: { ruleName: ruleName},

其中没有productid,就像你的方法productid是参数

public ActionResult UpsertDoc(string ruleName, string productId)

你的数据元素应该是并添加数据类型

data: { ruleName: 'name of rule', productId: 'productid' }, 
datatype : 'json'

【讨论】:

  • 虽然您是对的,但这不会对他遇到的问题产生任何影响。
  • @mattytommo - 如果需要调试代码..还需要检查 url 是否正确并且 degguer 命中方法调用,即操作方法
  • 正如我所说,它确实达到了断点,并且数据库操作成功,但调用永远不会返回成功。
猜你喜欢
  • 2017-12-06
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多