首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dojo dojo.rawXhrPost和dojo.xhrPost

Dojo dojo.rawXhrPost和dojo.xhrPost
EN

Stack Overflow用户
提问于 2009-12-04 13:25:41
回答 3查看 22.8K关注 0票数 8

我的问题是:我们可以使用dojo.xhrPost发布一些Json数据吗?更详细的情况:

我一直在尝试使用Dojo代码将JSON数据发布到RESTful服务中。dojo.rawXhrPostdojo.xhrPost的行为似乎是不同的,或者更准确地说,rawXhrPost()起作用,xhrPost()则不然。这与我对文档的解读不一致。

dojo.rawXhrPost的最初目的是使用一种方法将原始的post正文发送到服务器。从1.3开始,这个函数在dojo.xhrPost()中很常见。因此,有关dojo.rawXhrPost()的用法,请参见dojo.xhrPost()

这意味着xhrPost()就足够了。我的代码看起来是这样的--我有一个“玩具”库服务来管理图书版本。代码想发布一个新条目,

代码语言:javascript
复制
        var myEdition = {"Edition":{"isbn":"44"}};

        var xhrArgs = {
            url: "http://localhost:8081/LibraryWink/library/editions",
            postData: dojo.toJson(myEdition),
            handleAs: "json",
            headers: { "Content-Type": "application/json"},

            load: function(data) {
                dojo.byId("mainMessageText").innerHTML = "Message posted.";
            },
            error: function(error) {

                dojo.byId("mainMessageText").innerHTML = "Error :" + error;
            }
        };

        var deferred = dojo.rawXhrPost(xhrArgs);

标题:{“content”:"application/ JSON "}是必要的部分,这样我的JAX服务就可以理解内容是JSON。

我发现上面的代码工作得很好。然而,如果我说的是:

代码语言:javascript
复制
var deferred = dojo.xhrPost(xhrArgs);

没有在邮寄中传送数据。我有一个TCP/IP监视器,可以看到没有任何传输。

那么,这是一个bug,还是我不正确地驱动xhrPost()?或者我应该使用rawXhrPost()?如果是后者,我们在什么情况下使用这两种口味的XhrPost?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-31 21:51:26

从DOJO 1.4开始,这应该是可行的:

代码语言:javascript
复制
var myEdition = {"Edition":{"isbn":"44"}};

var xhrArgs = {
    url: "http://localhost:8081/LibraryWink/library/editions",
    postData: dojo.toJson(myEdition),
    handleAs: "json",
    headers: { "Content-Type": "application/json"},
    load: function(data) {
        dojo.byId("mainMessageText").innerHTML = "Message posted.";
    },
    error: function(error) {

        dojo.byId("mainMessageText").innerHTML = "Error :" + error;
    }
};

dojo.xhrPost(xhrArgs);

如果您要发布JSON数据,那么Content标头是关键的。如果不添加它,浏览器将默认为‘application/x form-urlencoded’,并为您编码您的数据。

您可能希望向Content标头(我这样做)添加一个字符集,但这并不会阻止它的工作:

代码语言:javascript
复制
    headers: { "Content-Type": "application/json; charset=utf-8"}

至少在Firefox 3.6上,字符集是自动添加的。

正如Dom提到的,HTTP等价于dojo.xhrPut。这里的不同之处在于,您需要将请求体数据添加为putData而不是postData。

票数 13
EN

Stack Overflow用户

发布于 2009-12-09 15:31:33

在使用来自http://ajax.googleapis.com/ajax/libs/dojo/1.3/dojo/dojo.xd.js的Dojo库时,我没有问题从表单(由dojo.formToJson()序列化的数据)发布数据。

代码语言:javascript
复制
dojo.xhrPut({
    putData: dojo.formToJson("locationInformation"),
    handleAs: "json",
    load: function(response, ioArgs) {
        // ... business logic ...
    },
    error: function(message, ioArgs) { alert(message+"\nurl: "+ioArgs.url); },
    url: "/API/Location"
});

使用Firefox中的Firebug,我可以看到我的请求是按预期构建的:

  • 在其他请求头中:Content-Type = application/json; charset=UTF-8
  • Put请求的主体:{"postalCode":"h8p3r8","countryCode":"CA"}

xhrPost/xhrPut似乎像rawXhrPost/rawXhrPut一样工作。

票数 3
EN

Stack Overflow用户

发布于 2011-03-24 13:28:13

还有一件事我想补充一下答案。在使用AJAX应用程序时,当您期望的时候,将接受值设置为application/json也是一个好主意。

代码语言:javascript
复制
headers: { "Content-Type": "application/json", "Accept" : "application/json"}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1846927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档