1

phonegapとandroidでサービスを消費しようとしています。

localhost を使用する私のサービスは、クロムで json を返します。

{
    "GetListaMunicipiosResult": [{
        "MunicipioID": "1",
        "MunicipioNome": "Florianópolis",
        "MunicipioUf":"SC"
    }, {
        "MunicipioID": "2",
        "MunicipioNome": "Jaraguá do Sul",
        "MunicipioUf": "SC"
    }]
}

私の.jsファイルでは、次のコードで GET json を呼び出します。

$('#cidades_page').live('pageshow',function(event){
    $.ajax("http://10.0.2.2:56976/MunicipiosService.svc/ListaMunicipios",{
        beforeSend: function (xhr) {
        $.mobile.showPageLoadingMsg();
        alert("beforeSend");
        },

        complete: function () {
            // $.mobile.hidePageLoadingMsg();
            alert("complete");
        },
        contentType: "application/json",
        dataType: "jsonp",
        jsonp: "callback",
        type: "GET",
        error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.status);
            alert(xhr.responseText);
            //alert(thrownError);
        },
        success: function (data) {
            alert(JSON.stringify(data));

        }
    });
});

ただし、ページが表示されると、アラート alert("beforeSend") のみが発生し、何も起こりません。

$.ajax(.... を使用して html に json 呼び出しを挿入し、クロムとその作業で開きます。他に何をすべきかわかりません。

手伝ってくれてありがとう

編集 Windows phone でテストしたところ、エラー Error:GetListaMunicipios was not called が表示されるようになりました。

私の.js:

$.ajax("http://localhost:56976/MunicipiosService.svc/ListaMunicipios?callback=?",{
        beforeSend: function (xhr) {
            // $.mobile.showPageLoadingMsg();
        alert('beforeSend');
        },

        complete: function () {
            // $.mobile.hidePageLoadingMsg();
            alert('complete');
        },
        contentType: 'application/json; charset=utf-8',
        dataType: 'jsonp',
        crossDomain: true,
        jsonp: 'callback',
        jsonpCallback:'GetListaMunicipios',
        type: 'GET',
        error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.status);
            alert(xhr.responseText);
            alert(thrownError);
        },
        success: function (data) {
            alert('success');

        }
    });

マイ WCF サービス

名前空間 GuiaService {

[ServiceContract]

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

    List<ClsListaMunicipios> GetListaMunicipios();
}

}

手伝ってくれてありがとう。

4

1 に答える 1

1

done、、failおよびを使用する必要がありalwaysます。

successerrorおよびcompleteは非推奨です。

更新:コメントに記載されているように、これはあなたがそれをどのように使用しているかには当てはまりません。問題は、jsonpの代わりにタイプとして使用しているためだと思いますjson

jsonpロード時に関数を自動的に呼び出すように設計されているため、サーバーは生成されたコードに関数呼び出しを追加する必要があります。jQueryがこの動作を予期して独自のコールバックを無効にするか、jsonpメカニズムを使用して独自のコールバックをトリガーする可能性がありますが、サーバーは実際には関数呼び出しを追加しないため、何も起こりません。

于 2013-03-21T21:58:19.823 に答える