javascript $.Ajax 呼び出しを使用して Web サービスから JSON を取得しようとしています。
<script type="text/javascript">
$(function () {
$("#" + "@Model.BidObjectId").submit(function () {
alert("Test");
var param = { 'id': "@Model.BidObjectId" };
$.ajax({
url: "http://localhost:11523/Service1.svc/GetBidObject",
dataType: "jsonp",
contentType: "application/json;charset=utf-8",
type: "GET",
data: JSON.stringify(param),
success: function (msg) {
alert("success");
if (msg != null) {
return msg.URL;
}
},
error: function (msg2) {
alert(msg2);
}
});
return false;
});
});
</script>
私は常にパーサーエラーでエラーシナリオに入ります
status: 200 statusCode: function ( map ) { statusText: "parsererror"
ここで説明を読みましたが、これにより OPTION 呼び出しが作成されるため、JSON を使用できません。POST を GET に変更して、いくつかの異なる方法 (クラスの作成など) でデータを返すことを試みましたが、問題が何であるかを理解できないようです。JSONP を使用したソリューションのみが、正しい GET または POST を実行することに同意しているようです。他のソリューションは私のWebサービスさえ見つけられません。
これが私のWebサービスのコードです:
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/GetBidObject?id={id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
string[] GetBidObject(string id);
と
public string[] GetBidObject(string id)
{
BidObject bidobject = new BidObject() { BidObjectId = 1, Title = "callback" };
JavaScriptSerializer ser = new JavaScriptSerializer();
string result = ser.Serialize(bidobject);
List<string> listResult = new List<string>();
listResult.Add(result);
return listResult.ToArray();
}
私は ASP.NET ではなく、Razor を使用しています。
[編集]
Fiddler で jsonp を json ごとに変更すると、呼び出しがOPTIONS http://localhost:11523/Service1.svc/GetBidObject?{%22id%22:%220%22} HTTP/1.1
クロムであることがわかります。IE Fiddler では何も検出されません。ajax呼び出しは決して行われません...私は本当に理解していません。