2017-11-10 75 views
0

我邮寄后阿贾克斯后返回查看到控制器

function SendF() { 

$.ajax({ 
    url: '@Url.Action("Summary")', 
    type: 'POST', 
    data: JSON.stringify(flags), 
    contentType: "application/json;charset=utf-8", 
    success: function() { 

    }, 
    error: function() { 
     alert("Oops! We've experienced a connection problem!"); 
    } 
}); 
} 

使用Ajax发送一些JSON数据到我的控制器

[HttpPost] 
     public ActionResult Summary(List<string> flagsChecked) 
     { 

      [...] 

       return View(flags); 
     } 

,并试图返回与数据的视图我已经处理,但我想这不会发生,因为ajax是关于异步http请求的。如何将我的代码更改为同步?

+2

进行ajax调用,然后使用'window.location.href'是毫无意义的。您的方法需要返回一个局部视图,然后在回调中更新DOM的某个部分,例如'成功:function(data){$(someElement).html(data); }' –

+0

我意识到,但粘贴了旧的代码。抱歉。无论如何,我更喜欢改变它不是异步的,所以我不需要像你描述的那样改变整个视图 –

+0

对不起,你最后的评论没有任何意义 - 它与异步或同步无关 –

回答

2

背后使用Ajax整个想法是给用户的部分页面更新体验。如果您正在进行ajax调用,并且一旦完成并且您正在重定向到另一个页面,则它不会为用户提供部分页面更新体验。它看起来非常类似于正常表单提交(整页提交)。

如果你绝对要通过AJAX将数据发送到服务器,但是想做重定向后Ajax调用成功完成,你可以做到这一点在上$.ajax方法successdone回调事件使用JavaScript。

您只需将location.href属性设置为新的url。

var flags = ["aa", "bb", "cc"]; 

$.ajax({ 
    url: '@Url.Action("Summary")', 
    type: 'POST', 
    data: JSON.stringify(flags), 
    contentType: "application/json;charset=utf-8" 
}).done(function(res) { 
    window.location.href = res.newUrl; 
}).fail(function(xhr, a, error) { 
     console.log(error); 
}); 

这是假设你的服务器操作方法返回包含您想重定向到URL中的newUrl财产的JSON响应。

[HttpPost] 
public ActionResult Summary(List<string> flagsChecked) 
{ 
    return Json(new { newUrl = Url.Action("Index","Home") }); 
} 
+0

我认为这是一个有效的解决方案,但这不是我的观点。我需要创建另一个问题,不要再搞乱了。 –