0

我花了好几天的时间在这上面工作,真的觉得很愚蠢。当我使用自己的 url 在本地尝试时,我一直在研究无法正常工作的演示和示例。我有一个以 json 格式返回结果的 Web 服务,我基本上只是尝试使用 dojo 调用它,现在只查看结果。我使用了搜索 google 示例,只是替换了 url 和参数。现在也许我仍然不了解基础知识: - io.script.get 与 xhrGet 如果使用跨域 url,最好使用 io.script.get?正确的?现在什么是回调参数?这是在 web 服务中调用的函数吗?我的网络服务网址如下: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 使用了一个 hack,它期望 jsonp 或 json 填充作为结果。这将 Web 服务调用的响应包装在一个自执行函数中。函数名称是回调名称。这必须在调用之前进行连接,以便它知道在响应返回时要调用的已定义函数。

所有的论点都有据可查http://dojotoolkit.org/reference-guide/1.7/dojo/io/script.html

我猜测您的服务为什么不起作用是因为您编写了 Web 服务并且它不处理 jsonp。它没有将其响应包装在回调参数名称中。

你的结果应该看起来像

 callback({json});

其中 callback 是您在 callbackParamName 中设置的任何内容

你也可以删除?来自您的网址,应该为您处理。

于 2012-06-05T16:21:08.803 回答