0

我试图让 dojo 显示来自远程 Web 服务的 Json 数据。不过我需要明确一点——托管我访问的 html/dojo 页面的 Web 服务器与运行返回 json 数据的 Web 服务的服务器不同——Web 服务服务器无法可靠地提供 html 页面(不要问!!)。

作为测试,我将页面移动到与 Web 服务相同的 Web 服务器中,并且以下内容有效。一旦我将其移回以便从 Apache 提供 html/dojo(//myhost.nodomain:82 说)并且发送 json 的 Web 服务是“{target: http://myhost.nodomain:8181 }” ,然后它停止工作。

我使用 FFox 查看网络,我看到 Web 服务调用正常,json 数据也返回并且看起来正确(我知道它来自之前的测试),但不再设置字段。我已经用 DataGrid 和下面的普通页面尝试过这个,效果相同。

我是不是被一些明显的东西绊倒了???

谢谢

    require([
            "dojo/store/JsonRest",
            "dojo/store/Memory",
            "dojo/store/Cache",
            "dojox/grid/DataGrid",
            "dojo/data/ObjectStore",
            "dojo/query",
            "dojo/domReady!"
        ],
        function(JsonRest, Memory, Cache, DataGrid, ObjectStore, query) {

            var myStore, dataStore, grid;
            myStore = JsonRest(
                                    {
                                        target: "http://localhost:8181/ws/job/definition/", 
                                        idProperty: "JOB_NAME"
                                    }
                                );
            myStore.query("JOB00001"
                        ).then(function(results) {
                            var theJobDef = results[0];                             
                            dojo.byId("JOB_NAME").innerHTML = theJobDef.JOB_NAME;
                            dojo.byId("SCHEDULED_DAYS").innerHTML = theJobDef.SCHEDULED_DAYS;
                        });

        }
    );
4

2 回答 2

0

您是否熟悉同源政策:

http://en.wikipedia.org/wiki/Same-origin_policy

基本上,它限制网站向其他域执行 AJAX 请求,而不是加载 html 页面。克服这个问题的常见解决方案是 CORS 和 JSON-P。但是,请记住,这些限制是出于安全原因。

于 2013-09-18T17:38:16.473 回答
0

Frans 所说的跨域限制是真的,但 dojo 有这个链接来解决这个问题。

require(["dojo/request/iframe"], function(iframe){
  iframe("something.xml", {
    handleAs: "json"
  }).then(function(xmldoc){
    // Do something with the XML document
  }, function(err){
    // Handle the error condition
  });
  // Progress events are not supported using the iframe provider
});

您可以简单地使用它,返回的数据可以插入到存储中,然后插入到网格中。

于 2013-09-18T18:44:46.677 回答