Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将Ajax文章与MVC控制器和重定向相结合_Javascript_Jquery_Ajax_Asp.net Mvc - Fatal编程技术网

Javascript 将Ajax文章与MVC控制器和重定向相结合

Javascript 将Ajax文章与MVC控制器和重定向相结合,javascript,jquery,ajax,asp.net-mvc,Javascript,Jquery,Ajax,Asp.net Mvc,我正试图让我的服务器端代码与我们从设计机构获得的一些页面模板配合得很好。一切都很好,只是我正在努力实现表单提交结果的正确行为 应该发生的是,如果表单提交成功,则会触发一些JQuery,将其动画化为一条成功消息。如果没有,则应将用户重定向到错误页面 以下是表单提交脚本: $.ajax({ type: 'POST', data: JSON.stringify(userObject), url: submitFormUrl, contentType: 'applicat

我正试图让我的服务器端代码与我们从设计机构获得的一些页面模板配合得很好。一切都很好,只是我正在努力实现表单提交结果的正确行为

应该发生的是,如果表单提交成功,则会触发一些JQuery,将其动画化为一条成功消息。如果没有,则应将用户重定向到错误页面

以下是表单提交脚本:

$.ajax({
    type: 'POST',
    data: JSON.stringify(userObject),
    url: submitFormUrl,
    contentType: 'application/json; charset=utf-8',
    cache: 'false',
    dataType: 'json',
    success: function (data) {
        if(data.Success){
            console.log('success');
            $('.thanks-msg').fadeIn(1000);
            $('#market-message').hide();
        }else{
            console.log('Error');
        }
    }
});
下面是它发布到的控制器操作:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(User userObject)
{
    bool userExists;
    try
    {
        if (ModelState.IsValid)
        {
            userExists = InsertUser(userObject); //calls a sproc
        }
        else
        {
            return CollectValidationErrors(); // collects all validation errors into a string
        }
    }
    catch(Exception ex)
    {
        ViewBag.ErrorMessage = "Sorry! There has been an error " + ex.Message;
        return Json(new { result = "Redirect", url = Url.Action("Error", "Home") });
    }

    if(userExists)
    {
        ViewBag.ErrorMessage = "This user already exists";
        return Json(new { result = "Redirect", url = Url.Action("Error", "Home") });
    }

    return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
所发生的事情是收到表单提交,并且成功执行表单中的代码。但如果返回错误状态,则不会重定向


我做错了什么?

尝试使用ajax调用的
error
属性:

$.ajax({
    type: 'POST',
    data: JSON.stringify(userObject),
    url: submitFormUrl,
    contentType: 'application/json; charset=utf-8',
    cache: 'false',
    dataType: 'json',
    error: function (XMLHttpRequest, textStatus, errorThrown) {
         //Do Something
    },
    success: function (data) {
        if(data.Success){
            console.log('success');
            $('.thanks-msg').fadeIn(1000);
            $('#market-message').hide();
        }else{
            console.log('Error');
        }
    }
});

尝试使用ajax调用的
error
属性:

$.ajax({
    type: 'POST',
    data: JSON.stringify(userObject),
    url: submitFormUrl,
    contentType: 'application/json; charset=utf-8',
    cache: 'false',
    dataType: 'json',
    error: function (XMLHttpRequest, textStatus, errorThrown) {
         //Do Something
    },
    success: function (data) {
        if(data.Success){
            console.log('success');
            $('.thanks-msg').fadeIn(1000);
            $('#market-message').hide();
        }else{
            console.log('Error');
        }
    }
});
您没有发送错误。 您可以在控制器操作中引发异常(强制HTTP状态500内部服务器错误)。这将导致不会调用success,而是调用ajax的error函数

$.ajax({
    type: 'POST',
    data: JSON.stringify(userObject),
    url: submitFormUrl,
    contentType: 'application/json; charset=utf-8',
    cache: 'false',
    dataType: 'json',
    success: function (data) {
        if(data.Success){
            console.log('success');
            $('.thanks-msg').fadeIn(1000);
            $('#market-message').hide();
        }else{
            console.log('Error');
        }
    },
    error: function(function (xhr, status, errorThrown)){
            // Do Redirect
        }
});
您没有发送错误。 您可以在控制器操作中引发异常(强制HTTP状态500内部服务器错误)。这将导致不会调用success,而是调用ajax的error函数

$.ajax({
    type: 'POST',
    data: JSON.stringify(userObject),
    url: submitFormUrl,
    contentType: 'application/json; charset=utf-8',
    cache: 'false',
    dataType: 'json',
    success: function (data) {
        if(data.Success){
            console.log('success');
            $('.thanks-msg').fadeIn(1000);
            $('#market-message').hide();
        }else{
            console.log('Error');
        }
    },
    error: function(function (xhr, status, errorThrown)){
            // Do Redirect
        }
});

您显示的代码无法执行所描述的操作。Javascript是一种区分大小写的语言,行
返回Json(new{success=true},JsonRequestBehavior.AllowGet)
将使用属性
success
生成客户端对象
数据
,而
数据。success
将是
未定义的
,其计算结果为
false
,为布尔值。您显示的代码无法执行所描述的操作。Javascript是一种区分大小写的语言,行
返回Json(new{success=true},JsonRequestBehavior.AllowGet)
将生成客户端对象
数据
,属性为
成功
,而
数据。成功
将是
未定义
,作为布尔值计算为