サーバー上で、JSONP応答を返すハンドラーを作成できます。
public class MyHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
// set the response content type to application/json
context.Response.ContentType = "application/json";
// generate some JSON that we would like to return to the client
string json = new JavaScriptSerializer().Serialize(new
{
status = "success"
});
// get the callback query string parameter
var callback = context.Request["callback"];
if (!string.IsNullOrEmpty(callback))
{
// if the callback parameter is present wrap the JSON
// into this parameter => convert to JSONP
json = string.Format("{0}({1})", callback, json);
}
// write the JSON/JSONP to the response
context.Response.Write(json);
}
public bool IsReusable
{
get { return true; }
}
}
ここでの考え方は、ジェネリックハンドラーがcallback
クエリ文字列パラメーターの存在をチェックし、指定されている場合はJSONをこのコールバックにラップするというものです。
これで、$。ajax呼び出しをこのサーバー側ハンドラーに向けることができます。
var url = "http://demo.dreamacc.com/MyHandler";
$.ajax({
type: 'GET',
url: url,
jsonp: 'callback',
dataType: 'jsonp',
contentType: "application/json",
dataType: 'jsonp',
success: function (result) {
alert(result.success);
},
error: function () {
alert('error');
}
});