0

jQuery(v 1.7.2)で利用しようとしているWCF JSONPサービスがあります。

サーバー側のコード:

[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]

[JSONPBehavior(callback = "method")]
List<string> GetList()
{
    return new List<string> {"test1", "test2"};
}

クライアント側のコード:

function showList()
    {
        $.ajax({
            url: 'http://mysite/myservice.svc/GetList',
            dataType: 'jsonp',
            data: { },
            contentType: "application/json",
            success: function (m)
            {
                debugger;
            },
            error: function (err)
            {
                debugger;
            }
            });
        }

何が起こるか: 'エラー' コールバックが呼び出され、errパラメーターを確認するとerr.responseText、正しい JSON 応答が含まれています。{"GetListResult":["test1","test2"]}

何が起こっているのかを確認するために、jQuery 自体をデバッグしましたが、結果ajaxConvertメソッドの変換に失敗していることがわかります。

jQuery 1.7.2 (最小化されていない)、7511 行目:success = ajaxConvert( s, response );それらの例外Could not complete the operation due to error 80020101.

をステップ実行すると、前述の例外をスローするajaxConvertことを試みていることがわかります。jQuery.globalEval(response)

私が間違っていることは何ですか?

4

3 に答える 3

0

あなたが解決策として見つけたかどうかはまだわかりませんが、これは役立つかもしれません。私は同じ問題を抱えていて、デバッガーで物事を追跡しました。最終的に、原因がクエリ文字列パラメータであることがわかりました。Webサービス呼び出しからquerystringパラメーターを削除すると、すべてが機能しました。これがお役に立てば幸いです

http://senseicris.wordpress.com/2012/05/19/jquery-error-80020101-a-fix

于 2012-05-26T09:36:02.613 に答える
0

JSON 出力はコールバック関数でラップされていますか? JSONP の重要な部分は、基本的に JSON データを関数に渡し、JavaScript スコープで実行されることです。

関数の名前は、jQuery によって自動的にリクエスト URL に追加される必要があります。つまり、リクエストは次のようになります。http://mysite/myservice.svc/GetList?callback=jQuery_random1231

次に、JSONP 出力は次のようになります。

jQuery_random1231({ key: 'value', key1: 'value1' .. });

バックエンドは明らかにこれに対応する必要があります。

于 2012-04-23T16:31:43.223 に答える
0

問題は、サービスが JSONP ではなく JSON を返すことだと思います。eval 関数は文字列を JavaScript コードとして評価しようとします。それが JSONP 形式の場合、関数は評価に成功します。実際の JSONP 応答は次のようになります: method({"GetListResult":["test1","test2"]})。

ここで MSDN サンプルの JSONPBehavior を使用していると思います。

動作をデバッグして、正しく動作するかどうかを確認できます。個人的には、生のストリームを JSONP にシリアライズするときに、このクラスに問題がありました。

.NET 4 を使用している場合、この動作を使用する必要はなくなりました。代わりに、web.config でバインドの構成を変更できます。

<binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />

もう 1 つの方法は、ajax メソッドの代わりにgetJsonメソッドを使用することです。JSONPでそれを使用していますが、動作します。

乾杯、ジャン

于 2012-04-24T07:40:09.137 に答える