0

getJson呼び出しのASP.NetWebサイトでJSONPリターンをサポートする方法は?

var url = "http://demo.dreamacc.com/TextTable.json?callback=?";
        $.ajax({
            type: 'GET',
            url: url,
            async: false,
            jsonpCallback: 'jsonCallback',
            contentType: "application/json",
            dataType: 'jsonp',
            success: function (ooo) {
                alert('hi');
                alert(ooo);
            },
            error: function () {
                alert('w');
            }
        });

前の関数は、成功関数もエラー関数も起動しません

4

1 に答える 1

2

サーバー上で、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');
    }
});
于 2013-02-03T14:57:55.473 に答える