2012-11-03 47 views
1

我正在使用asp.net web api進行跨域json發佈。在我的服務/服務器端我有以下方法,該方法響應於POST請求:在IE,Firefox和Chrome中跨域Json發佈成功,但在Firefox和Chrome上都報告爲空錯誤

// POST api/<controller> 
public HttpResponseMessage Post(Customer newCustomer) 
{ 
    DataClassesDataContext db = new DataClassesDataContext(); 
    var response = Request.CreateResponse<Customer>(HttpStatusCode.Created, newCustomer); 

    db.Customers.InsertOnSubmit(newCustomer); 
    db.SubmitChanges(); 

    string uri = Url.Link("DefaultApi", new { id = newCustomer.Id }); 
    response.Headers.Location = new Uri(uri); 

    return response; 
} 

而在客戶端,它在不同的端口號(即跨域)運行,我使用以下jQuery代碼:

<body> 

<input type="button" value="click me" onclick="hello()" /> 

<script type="text/javascript"> 
    function hello() { 
     //SEE: http://stackoverflow.com/questions/5241088/jquery-call-to-webservice-returns-no-transport-error 
     $.support.cors = true; 

     //var jsonObjects = [{ Name: "Name1", CellphoneNum: 1234657911 }]; 

     $.ajax({ 
      url: "http://localhost:26037/api/customer", 
      type: "POST", 
      crossDomain: true, 
      data: { Name: "Name321", CellphoneNum: 1234657922 }, 
      dataType: "json", 

      success: function (result) { 
       alert("Success"); 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
       alert('Thrown Error: ' + thrownError); 
       alert('xhr status: ' + xhr.status); 
      } 
     }); 
    } 
    </script> 
</body> 

我的問題是,從客戶端,IE瀏覽器上會顯示成功警報消息和數據將被插入使用LINQ代碼在我的POST方法的數據庫。但是,使用Chrome或Firefox時,數據也會插入到數據庫中,並且LINQ代碼將成功執行,但會顯示空字符串錯誤和0 xhr狀態的消息框。

爲什麼它只報告Firefox和Chrome上的錯誤,同時數據在服務器上發佈併成功處理?

回答

1

要跨域調用,我已經在Web應用程序根目錄IIS上部署時添加的crossdomain.xml。與cross domain.xml有以下內容。

<?xml version="1.0"?> 
<cross-domain-policy> 
<allow-access-from domain="*"/> 
</cross-domain-policy> 

我希望它能適用你的情況。

相關問題