AJAX在IE中运行良好,但在Firefox \ Chrome(Bizarre :)中运行不正常

时间:2013-09-23 02:25:23

标签: jquery ajax asp.net-mvc internet-explorer firefox

我正在使用IE 10,Firefox 24,Chrome 29。

我有一个在ASP.NET MVC 4(IIS 8)上运行的服务器,在控制器中有一个简单的功能:

[HttpPost]
public ActionResult Register(string PhoneNumber, string DisplayName)
{
    // Some commented code here ...
    ViewBag.Message = "Working!";
    return View();
}

视图如下:

@{
    ViewBag.Title = "Register";
}
@ViewBag.Message

Ajax调用如下:

$.ajax({
    type: "POST",
    url: "http://localhost:1283/home/Register",
    data: {
        phoneNumber: "123",
        displayname: "Miko"
    },
    success: function (response) {
        alert("In success: " + response);
    },
    error: function (result) {
        alert('In error: '+ result);
    }
})

在所有浏览器中,进行了AJAX调用,服务器中的Register()被触发,但在完成后,此代码在Internet Explorer中正常工作,但总是使用Firefox \ Chrome转到'error()'。

如何让这些功能同时适用于Firefox和Chrome?

感谢。

1 个答案:

答案 0 :(得分:0)

首先,我认为你必须看看Access_control_CORS

在MVC.NET中有一种简单的方法可以解决这个问题。 将以下代码添加到Global.asax

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        if (!string.IsNullOrWhiteSpace(Request.Headers["Origin"]))
        {
            if (IsOriginInCrossDomainWhiteList(Request.Headers["Origin"]))
            {
                Response.AddHeader("Access-Control-Allow-Origin", Request.Headers["Origin"]);
            }
            else
            {
                Response.End();
            }
        }
    }

    internal static bool IsOriginInCrossDomainWhiteList(string origin)
    {
        Uri uri;
        if (Uri.TryCreate(origin, UriKind.Absolute, out uri))
        {
            foreach (var whiteDomain in Properties.Settings.Default.CrossDomainWhiteList)
            {
                if (string.Compare(uri.Host, whiteDomain, true) == 0)
                {
                    return true;
                }
            }
        }
        return false;
    }

并将一些域添加到Web.config中,如:

  <applicationSettings>
     <YourProject.Properties.Settings>
      <setting name="CrossDomainWhiteList" serializeAs="Xml">
        <value>
          <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <string>www.youhost.com</string>
          </ArrayOfString>
        </value>
      </setting>
     </YourProject.Properties.Settings>
  </applicationSettings>

然后,您可以在CrossDomainWhiteList中添加的域中使用ajax调用。