当前位置:  开发笔记 > 前端 > 正文

Dojo dojo.rawXhrPost和dojo.xhrPost

如何解决《Dojodojo.rawXhrPost和dojo.xhrPost》经验,为你挑选了1个好方法。

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

我一直在尝试使用Dojo代码将JSON数据POST到RESTful服务.似乎dojo.xhrPostdojo.rawXhrPost的行为是不同的,或者更准确的rawXhrPost()起作用而xhrPost()不起作用.这与我对文档的阅读不一致

dojo.rawXhrPost的最初目的是一种可用于将原始帖子主体发送到服务器的方法.从1.3开始,此函数与dojo.xhrPost()相同.因此,对于dojo.rawXhrPost()的使用,请参阅dojo.xhrPost()

这意味着xhrPost()就足够了.我的代码看起来像这样 - 我有一个管理Editions of Books的"玩具"图书馆服务.代码想要POST一个新条目,

        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);

头:{"内容类型":"应用/ JSON"}中不可或缺的一部分,使我的JAX-RC服务的理解是,内容是JSON.

我发现上面的代码完美无缺.但是如果相反我说:

var deferred = dojo.xhrPost(xhrArgs);

POST中没有数据传输.我有一个TCP/IP监视器,可以看到没有任何传输.

那么,这是一个错误,还是我错误地驾驶xhrPost()?或者我应该使用rawXhrPost()?如果是后者,我们在什么情况下使用XhrPost这两种口味?



1> lambacck..:

从DOJO 1.4开始,这应该有效:

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-Type标头至关重要.如果您不添加它,浏览器将默认为"application/x-www-form-urlencoded"并为您编码数据URL.

您可能希望在Content-Type标头中添加一个字符集(我这样做),但这并不能阻止它运行:

    headers: { "Content-Type": "application/json; charset=utf-8"}

至少在Firefox 3.6上,会自动添加charset.

正如Dom所提到的,HTTP PUT等价物是dojo.xhrPut.这里的区别在于您需要将请求正文数据添加为putData而不是postData.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有