1

私はWCFサービスを持っています:

[ServiceContract]

public interface IMunicipiosService
{
    [OperationContract]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "ListaMunicipios")]

    List<ClsListaMunicipios> GetListaMunicipios();
}

クロムで返されるjson(JSONまたはJSONPですか?):

{"GetListaMunicipiosResult":[{"MunicipioID":"1","MunicipioNome":"Florianopolis","MunicipioUf":"SC"},{"MunicipioID":"2","MunicipioNome":"Joinville","MunicipioUf":"SC"}]}

私のJS:

$.ajax("http://localhost:56976/MunicipiosService.svc/ListaMunicipios", {

    beforeSend: function (xhr) {
        // $.mobile.showPageLoadingMsg();
        alert('beforeSend');
    },

    complete: function () {
        // $.mobile.hidePageLoadingMsg();
        alert('complete');
    },
    contentType: 'application/json; charset=utf-8',
    dataType: 'jsonp',
    type: 'GET',
    data: {},

    error: function (xhr, ajaxOptions, thrownError) {
        alert('not ok 1 ' + xhr.status);
        alert('not ok 2 ' + xhr.responseText);
        alert('not ok 3 ' + thrownError);
    },
    success: function (data) {
        alert('success');

    }
});

しかし、私はエラーが発生します:

よくない 1 200

よくない 2 未定義

正常ではありません 3 エラー jQueryXXXXXXXX は呼び出されませんでした

4

1 に答える 1

1

Chrome からの GET リクエストで JSON レスポンスを取得できるので、WCF サービスを適切に設定していると思います。

唯一の問題は、成功のコールバックが起動しないことです。これは、クロスドメイン リクエストを実行しているが、WCF メソッドから単に JSON を返す場合に発生します。応答を構築してストリーミングするために何かが必要です。

を単に返す代わりにList<ClsListaMunicipios>、サービス メソッドでこれを行うことを検討してください。

    HttpContext.Current.Response.ClearContent();

    HttpContext.Current.Response.ContentType = "application/json";
    string callback = HttpContext.Current.Request.QueryString["callback"];

    HttpContext.Current.Response.Write(callback + "( " + new JavaScriptSerializer().Serialize(YourListObjectGoesHere)  + " )");
    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.End();

私はあなたの AJAX 呼び出しを使用し、その後成功のコールバックが発生しました。

于 2013-03-24T13:23:55.020 に答える