dojo.xhrGet或dojo.xhrPost

dojo.xhrGet或dojo.xhrPost,dojo,Dojo,我对这个很陌生,事实上这是我第一次尝试Dojo。我正在尝试从以下网站获取数据: <script text="text/javascript" src="http://o.aolcdn.com/dojo/1.3/dojo/dojo.xd.js" djConfig="parseOnLoad:true,isDebug:true" ></script> <script type="text/javascript"> //How are we supp

我对这个很陌生,事实上这是我第一次尝试Dojo。我正在尝试从以下网站获取数据:

<script
  text="text/javascript"
  src="http://o.aolcdn.com/dojo/1.3/dojo/dojo.xd.js"
  djConfig="parseOnLoad:true,isDebug:true"
></script>

<script type="text/javascript">
  //How are we supposed to know what else to include in the dojo thing?  like query?
  dojo.addOnLoad(function(){
    console.log("hi");
    dojo.xhrPost({
      url: "http://www.scrapbookingsuppliesrus.com/catalog/layout", //who knows how to set relative urls?
      handleAs: "json", //get json data from server
      load: function(response, ioArgs){
        console.log("got");
        console.log(response); //helps with the debugging
        return response;  //that way goods should be a very large array of the data we want
      },
      error: function(response, ioArgs){
        console.log("nope didn't make it", response+' '+ioArgs); //helps with the debugging
        return response; //who knows what this does
      } //last item, thus no extra comma
    });
  });
</script>

//我们怎么知道dojo还包括什么?像查询?
dojo.addOnLoad(函数(){
控制台日志(“hi”);
dojo.xhrPost({
url:“http://www.scrapbookingsuppliesrus.com/catalog/layout“,//谁知道如何设置相对URL?
handleAs:“json”//从服务器获取json数据
加载:函数(响应、ioArgs){
console.log(“got”);
console.log(response);//有助于调试
return response;//这样,商品应该是我们想要的一个非常大的数据数组
},
错误:函数(响应,ioArgs){
log(“nope没有成功”,response+''+ioArgs);//有助于调试
return response;//谁知道这是怎么回事
}//最后一项,因此没有额外的逗号
});
});
但什么也没发生。在这里,response和ioArgs变量到底是什么。它们应该是对请求的神奇响应,我想这已经被特别定义了。但是,谁知道呢。此外,我认为在每次尝试之后,它都会触发加载或错误,但唉。
曾经有一个错误,我是去一个被禁止的uri,但然后firebug会引用一个非常大的dojo脚本,在那里无法告诉它为什么会被破坏。其他人在什么环境下开发?

代码中有几个非常基本的错误

  • 在这里,您使用脚本标记的缩写形式
    />
    (这是禁止的),同时也包括结束语
console.log(“hi”)

  • 语句末尾缺少分号

您尝试从加载数据,您的脚本是否也在该域上运行?否则,跨域Ajax(google it)的安全限制将阻止您加载数据。

dojo兴趣列表中也提出了这个问题,并且对这个问题有一些回答。

嗯,有几个问题

让我们先从简单的开始

在开发时,您希望使用Dojo的“未压缩”版本,可以通过将.uncompressed.js附加到正在使用的Dojo库的路径来找到:

http://o.aolcdn.com/dojo/1.3/dojo/dojo.xd.js.uncompressed.js
如果是在核心Dojo中,这将更容易看到哪些中断

接下来是djConfig参数。我很确定Dojo可以处理字符串,但传统上它是用对象定义的,因此,一旦包含Dojo库:

<script src="path to dojo"></script>
现在应该解决了


作为个人说明,我不建议使用XHR,而是建议使用dojo.io.script.get方法,从长远来看,这种方法更易于移植

如果您的页面由提供,则您发布的代码看起来是正确的。声明djConfig的方式是正确的,在xhrGet的参数中指定load和error是正确的。你必须深入研究并调试

看看Firebug的控制台窗口。您应该看到GET请求、完整的请求和响应HTTP头以及响应文本。如果您没有看到它,那么我怀疑在调用onLoad函数之前发生了其他错误-我也会在顶部抛出一个console.log。如果未调用onLoad函数,您可能希望单击脚本选项卡中的小向下箭头并设置“所有错误时中断”

关于响应和
ioArgs
是什么

响应
就是响应。如果请求成功,它将是JSON对象(或XML DOM对象,或HTML DOM对象,或文本,取决于handleAs)。如果请求失败,它将包含一个包含错误详细信息的对象

ioArgs
是一个包含大量关于xhr请求的低级细节的对象。作为辅助,我发现如果将回调附加到xhrGet返回的延迟:

var dfd = dojo.xhrGet(args);
dfd.addCallbacks(function(response) {...}, function(error){...});
然后回调不会传递
ioArgs
参数,只传递
响应(或错误)

是官方的dojo文档站点,包含很多细节和示例。
Dojo:O'Reilly的权威指南是一本优秀的书。如果您要进行大量的dojo开发,那么它是一个很好的资源。

首先,让我们从基础开始,然后您可以添加所有功能

您只需要实现Ajax(利用Dojo):

现在,您可以在“getData”函数中使用数据

您可以找到许多教程来了解它是如何实现的。是我发现的最完整的示例,在这里您可以看到它是如何实现的,所有代码都可用:

var deferred = dojo.xhrPost({
      url: "http://www.scrapbookingsuppliesrus.com/catalog/layout", //who knows how to set relative urls?
      handleAs: "json" //get json data from server
    });

    if(deferred) {
      deferred.addCallback(function(response){
        console.log("got");
        console.log(response); //helps with the debugging
        return response;  //that way goods should be a very large array of the data we want
      });
      deferred.addErrback(function(response){
        console.log("nope didn't make it", response+' '+ioArgs); //helps with the debugging
        return response; //who knows what this does
      });
    }
var dfd = dojo.xhrGet(args);
dfd.addCallbacks(function(response) {...}, function(error){...});
function sendData(dataToPost) {
    dojo.xhrPost({
            url: "http://myUrl.html",
            postData: "data="+dataToPost,
            handleAs: "text",
            load: function(text){
                getData(text);
                },
            error: function(error){
                alert(error);
              }         
    });
}
function getData(text){
      myVariable = text;
}