2

C# と WCF で書かれた小さな Web サービスがあります。

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{
    [WebMethod]
    public string HelloWorld()
    {
        return "Hello Worlds";
    }
}

小さな jQuery コードがあります。

        $.support.cors = true;

        $.ajax({
            type: "POST",
            url: "http://localhost:61614/Service1.asmx/HelloWorld",
            data: '{}',
            dataType: "json",
            success: function (msg) {
                alert(0);
            }, error: function (a, b, c) { alert("Err:" + c ); 
            }
        });

これにより、Web サービスが呼び出されます。呼び出しに問題はありませんが、戻り時にエラーが発生します。

Web サービスは 1 つのアプリケーション内にあり、Web ページはそれ自体が単なる HTML ページです。最終的に、HTML は PhoneGap 内で使用されます。

私はあらゆる種類のことを試しました。

追加するcontentType: "application/json; charset=utf-8",と、呼び出し全体が失敗します。を使用するdataType: 'jsonp"と、呼び出しが失敗します。

基本的に、上記は WS を呼び出しますが、戻り時にエラーが発生しますが、これは奇妙です。

私の要件は、Web サービスから JSON オブジェクトを返す必要があり、Safari で動作する必要があるということです。

JSONP 呼び出しの完全なサンプル コードを持っている人はいますか?

4

1 に答える 1

0

jQuery getJSONから:

URL に「callback=?」という文字列が含まれている場合 (またはサーバー側 API で定義されている同様のもの)、要求は代わりに JSONP として扱われます。詳細については、$.ajax() の jsonp データ型の説明を参照してください。

リクエストを JSONP リクエストとして扱うにはcallback=?、URL に含める必要があります。これは、コールバック関数を作成し、その関数の名前をコールバック パラメータとしてサーバーに渡すように jQuery に指示します。

サーバー側のコードでは、メソッドは、クエリ文字列のコールバック パラメーターとして渡された JavaScript 関数の名前でラップまたはパディングされた JSON コードを返す必要があります。

基本的に、実行しているのは JavaScript をクライアント ブラウザーに返すことです。クライアント ブラウザーはすぐに実行され、ページのコンテキストで既に定義されている関数を呼び出します。

JavaScript:

$.getJSON("http://localhost:61614/Service1.asmx/HelloWorld?callback=?",
    function(data) {

        // alert raw JSON data
        alert(JSON.stringify(data));

        // access the "say" property and alert it
        alert(data.say);
    }
);

サーバ側:

これは、サーバー側で行う必要があることの大まかなバージョンです。

// get the callback parameter value and assign to the String callback
...
return callback + "( { 'say' : 'HelloWorld' } );";

内部で何が起こっているかについての技術的な説明:

これは今日知っておく必要があることではありませんが、jQuery が JSONP をどのように実装しているかを理解するのに役立つかもしれません。

これは、次のように評価されます。

return "jquery43214321432143242({'say':'HelloWorld'});"

wherejquery43214321432143242は、成功のコールバック関数に付けられたランダムな名前です。ここでも、返されたテキストは text/javascript を使用して返されるため、すぐに実行{'say':'HelloWorld'}され、オブジェクトがパラメーターとして関数に渡されます。

結果の出力は、未加工の JSON と、プロパティから取得された "HelloWorld" という単語を表すアラート メッセージになり.sayます。

于 2012-05-06T23:47:40.747 に答える