asp.netWebAPIを利用してクロスドメインのjson投稿を行っています。私のサービス/サーバー側では、POST
リクエストに応答する次のメソッドがあります。
// 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で成功アラートメッセージが表示され、POSTメソッドのLINQコードを使用してデータがデータベースに挿入されることです。ただし、ChromeまたはFirefoxを使用すると、データもデータベースに挿入され、LINQコードは正常に実行されますが、空の文字列エラーと0xhrステータスのメッセージボックスが表示されます。
データが投稿されてサーバーで正常に処理されているときに、FirefoxとChromeでのみエラーが報告されるのはなぜですか?