0

私はこれに何日も費やしましたが、本当にばかげていると感じています。私は、自分の URL でローカルで試してみるとうまくいかないデモやサンプルに取り組んできました。結果をjsonで返すWebサービスがあり、基本的にdojoを使用してそれを呼び出そうとしているだけで、今のところ結果を表示するだけです。Google 検索の例を取り上げ、URL とパラメーターを置き換えただけです。おそらく、私はまだ基​​本を理解していないので: 正しい?今、コールバックパラメータは何ですか? これは Web サービスで呼び出されている関数ですか? 私の Web サービス URL は次のとおりです: http://xxx.xxx.x.xxx/WcfServices/WcfInstance/Service1.svc/RetrievData?query=Word

次のコードを使用すると、何も表示されません。

function searchGoogle() {
    // Look up the node we'll stick the text under.
    var targetNode = dojo.byId("rules");

    // The parameters to pass to xhrGet, the url, how to handle it, and the callbacks.
    var jsonpArgs = {
        url: "http://xxx.xxx.x.xxx/WcfServices/WcfInstance/Service1.svc/RetrieveData?",
        callbackParamName: "callback",
        content: {

            query:"dojowords"
        },
        load: function (data) {
            // Set the data from the search into the viewbox in nicely formatted JSON
            targetNode.innerHTML = "<pre>" + dojo.toJson(data, true) + "</pre>";
        },
        error: function (error) {
            targetNode.innerHTML = "An unexpected error occurred: " + error;
        }
    };
    dojo.io.script.get(jsonpArgs);
}
dojo.ready(searchGoogle);

Web サービスの結果は次のようになります。

"{\"rules\":[{\"value\":\"AllState\"},
 {\"value\":\"Cidade de Goa beach\"},{\"value\":\"Euro 2012\"},     
 {\"value\":\"Euro2012\"},{\"value\":\"European&Championship\"},
 {\"value\":\"Holiday  Inn Resort\"},
 {\"value\":\"Holiday Inn Resort goa\"},
 {\"value\":\"Hotel Goa\"},{\"value\":\"Hyatt Goa\"},{\"value\":\"I buy car\"},...

この部分が正しければ、少なくとも、データグリッドまたはチャートにバインドできるデータがあることがわかります。

4

1 に答える 1

3

dojo.io.script.get は、すべてのクロスドメイン要求用です。xhrGet は同じドメイン リクエスト用です。

dojo.io.script.get は、結果として jsonp または json パディングを期待するハックを使用します。これにより、Web サービス呼び出しの応答が自己実行関数内にラップされます。関数名はコールバック名です。これは、呼び出しの前に配線する必要があるため、応答が戻ってきたときに呼び出す関数が既に定義されていることがわかります。

すべての引数は十分に文書化されていますhttp://dojotoolkit.org/reference-guide/1.7/dojo/io/script.html

サービスが機能しない理由についての私の推測は、Web サービスを作成し、jsonp を処理しないためです。応答を callbackparamname 内にラップしていません。

結果は次のようになります

 callback({json});

callback は callbackParamName で設定したものです

? を削除することもできます。あなたのURLから、それはあなたのために処理されるべきです。

于 2012-06-05T16:21:08.803 に答える