AJAX 调用 ASP MVC 动作

Posted

技术标签:

【中文标题】AJAX 调用 ASP MVC 动作【英文标题】:AJAX call a ASP MVC action 【发布时间】:2016-05-14 18:36:59 【问题描述】:

我尝试通过 ajax 从域外部调用 ASP MVC 操作。

设置

我已经托管了一个包含此操作的 MVC 应用程序:

[HttpPost]
[AllowAnonymous]
public ActionResult AjaxLogin(LoginViewModel model)

    [..Login stuff..]
    return Json(new  Url: "...", Result: "..." );

用法

为了测试,我尝试使用 Firefox 的 HttpRequester 插件进行手动调用,结果如下:

它工作正常,答案如预期。所以现在我想从第二个网页(不同的域)进行 ajax 调用。

我的 jquery (2.2.0) ajax 调用如下所示:

var requestData = 
    model: 
        Email: emailValue,
        Password: passwordValue
    
;

var requestPlain = JSON.stringify(requestData);

$.ajax(
    url: json_login_url,
    data: requestData,
    method: 'POST',
    async: false,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function (result, textStatus, jqXHR) 
        [...]                     
    ,
    error: function (jqXHR, textStatus, errorThrown) 
        [...]
    ,
    beforeSend: function (jqXHR, settings) 
        return true;
    ,
    complete: function (jqXHR, textStatus) 
    ,
);

问题

ajax 调用只会给我一个错误。

那么为什么我的 testcall 可以工作,但我的 ajax 调用却不行?

尝试

我还尝试使用 firefox 调试工具进行网络分析。

但我不明白为什么它不起作用,因为它显示“状态代码 200”但结果为空!?

【问题讨论】:

我不确定这是不是答案,但您是否尝试过 JSONP - ***.com/questions/2067472/what-is-jsonp-all-about 另外,如果您从另一个 URL 请求数据 - 使用 Web API 控制器不是更好吗? 【参考方案1】:

这可能会也可能不会解决您的问题,但如果您要进行跨域 AJAX 调用,请确保您设置了 CORS:

Setting Access-Control-Allow-Origin in ASP.Net MVC - simplest possible method

【讨论】:

但这并不能解释为什么使用 HttpRequester 的测试有效?如果这是解决方案,它也应该失败。

以上是关于AJAX 调用 ASP MVC 动作的主要内容,如果未能解决你的问题,请参考以下文章

从 ajax 获取数据到 mvc 动作

如何在 ASP.Net MVC 5 中调用嵌套 ajax 调用并将对象数据发送到控制器

ASP.NET MVC 4 异步子动作

ASP.NET MVC学习之过滤器篇

ASP.NET MVC 中的 jQuery AJAX 响应

从 ASP.NET MVC 操作返回部分视图和 JSON