dojo.io.script.get vs dojo.xhrGet

时间:2012-06-05 16:18:42

标签: ajax dojo jsonp

我花了几天时间研究这个并且真的感到愚蠢。我一直致力于演示和样本,当我用我自己的网址在本地尝试时,它们永远不会工作。我有一个Web服务,它返回json中的结果,我只是基本上尝试使用dojo调用它,现在只是查看结果。我拿了搜索google示例,只是替换了url和参数。现在也许我仍然不了解基础知识,所以:    - io.script.get vs xhrGet 如果使用跨域url,最好使用io.script.get?正确? 现在callbackparam是什么?这是在Web服务中调用的函数吗? 我的webservice网址如下: 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);

以下是网络服务结果:

"{\"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\"},...

如果我认为这部分是正确的,那么至少我知道我有数据可以绑定到数据网格或图表。

1 个答案:

答案 0 :(得分: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。它没有将其响应包装在callbackparamname中。

您的结果应该类似于

 callback({json});

回调是你在callbackParamName

中设置的任何内容 你也可以删除?来自你的网址,应该为你处理。