2013-09-23 189 views
1

我使用IE 10,Firefox的24,29鉻AJAX工作正常,在IE,但不能在Firefox Chrome瀏覽器(奇怪的:))

我對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上運行?

謝謝。

+0

你知道什麼是錯誤。也嘗試在ajax設置中給出'dataType:「html」'和'contentType:「application/json」'。 – PSL

+0

url:「http:// localhost:1283/home/Register」,它可能是由跨站點請求引起的,只要看看chrome中的控制檯即可。我認爲你應該在同一臺主機上設置你的前端和服務器。 – Mithril

+0

(PSL)我不知道錯誤是什麼。 我在AJAX調用中添加了兩行,仍然無法工作。 Chrome的控制檯中的 –

回答

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調用。

相關問題