我的问题是:我们可以使用dojo.xhrPost发布一些Json数据吗?更详细的情况:
我一直在尝试使用Dojo代码将JSON数据发布到RESTful服务中。dojo.rawXhrPost和dojo.xhrPost的行为似乎是不同的,或者更准确地说,rawXhrPost()起作用,xhrPost()则不然。这与我对文档的解读不一致。
dojo.rawXhrPost的最初目的是使用一种方法将原始的post正文发送到服务器。从1.3开始,这个函数在dojo.xhrPost()中很常见。因此,有关dojo.rawXhrPost()的用法,请参见dojo.xhrPost()
这意味着xhrPost()就足够了。我的代码看起来是这样的--我有一个“玩具”库服务来管理图书版本。代码想发布一个新条目,
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。
我发现上面的代码工作得很好。然而,如果我说的是:
var deferred = dojo.xhrPost(xhrArgs);没有在邮寄中传送数据。我有一个TCP/IP监视器,可以看到没有任何传输。
那么,这是一个bug,还是我不正确地驱动xhrPost()?或者我应该使用rawXhrPost()?如果是后者,我们在什么情况下使用这两种口味的XhrPost?
发布于 2010-01-31 21:51:26
从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标头是关键的。如果不添加它,浏览器将默认为‘application/x form-urlencoded’,并为您编码您的数据。
您可能希望向Content标头(我这样做)添加一个字符集,但这并不会阻止它的工作:
headers: { "Content-Type": "application/json; charset=utf-8"}至少在Firefox 3.6上,字符集是自动添加的。
正如Dom提到的,HTTP等价于dojo.xhrPut。这里的不同之处在于,您需要将请求体数据添加为putData而不是postData。
发布于 2009-12-09 15:31:33
在使用来自http://ajax.googleapis.com/ajax/libs/dojo/1.3/dojo/dojo.xd.js的Dojo库时,我没有问题从表单(由dojo.formToJson()序列化的数据)发布数据。
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{"postalCode":"h8p3r8","countryCode":"CA"}xhrPost/xhrPut似乎像rawXhrPost/rawXhrPut一样工作。
发布于 2011-03-24 13:28:13
还有一件事我想补充一下答案。在使用AJAX应用程序时,当您期望的时候,将接受值设置为application/json也是一个好主意。
headers: { "Content-Type": "application/json", "Accept" : "application/json"}https://stackoverflow.com/questions/1846927
复制相似问题