为什么URL未定义(在JQuery Ajax Post之后)

时间:2015-07-24 14:13:38

标签: javascript jquery asp.net ajax

基本上,我在配置文件视图中执行Ajax Post后尝试刷新视图。

 $.ajax({ 
     url: '/Profile/Index',
     dataType: "html", 
     type: "POST", 
     data: JSON.stringify(10), 
     success: function(returl) { 
         alert('It worked'); 
         window.location.href = returl.url;
     }, 
     error: function(jqXHR,responseText,textStatus) {
         alert(jqXHR.responseText) 
     } 
});

这是HttpPost行动:

[HttpPost]
public ActionResult Index(string number){
    //Things to do
    var redirectUrl = new UrlHelper(Request.RequestContext).Action("Index", "Profile");
    return Json(new { Url = redirectUrl });
}

发帖后我得到了这个网址:http://localhost:50738/undefined 我已经调试了Controller方法,它正确地得到/ Profile。我无法理解为什么这个问题会持续下去......谢谢!

3 个答案:

答案 0 :(得分:3)

您告诉Ajax请求期望返回HTML而不是JSON,因此,返回将完全是字符串值,因此returl.url将是未定义的。改为将数据类型更改为json。

http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings上找到此信息。查看datatype参数以获取更多信息。

$.ajax({
        url: '/Profile/Index',
        dataType: "json",
        type: "POST",
        data: JSON.stringify(10),
        success: function (returl) {
            alert('It worked');
            window.location.href = returl.Url;
        },
        error: function (jqXHR, responseText, textStatus) {
            alert(jqXHR.responseText);
        }
    });

答案 1 :(得分:2)

如果您只返回一个字符串,请按原样返回

控制器代码

return Json(redirectUrl);

并直接在响应中使用字符串

$.ajax({
url: '/Profile/Index',
dataType: "json",
type: "POST",
        data: JSON.stringify(10),
        success: function (returl) {
            alert('It worked');
            window.location.href = returl;
        },
        error: function (jqXHR, responseText, textStatus) {
            alert(jqXHR.responseText);
        }
    });

答案 2 :(得分:1)

尝试使用location.href=returl.Url代替location.href=returl.url。如上面的答案所指出的那样,将预期类型固定为'json'。