2012-04-30 103 views
1

我正在使用Dojo JsonREST存储与服务器上的RESTful API进行通信。 GET和QUERY方法工作得很好,使用异步回调处理程序。但是,在JsonREST存储上发布新对象的PUT请求似乎没有异步回调功能。然后只有在PUT请求完成并且成功的情况下才能发起事件。Dojo:如何使用回调方法在jsonRest存储上创建PUT请求

从文档(http://dojotoolkit.org/reference-guide/1.7/dojo/store/JsonRest.html):

require(["dojo/store/JsonRest"], function(JsonRestStore){ 
    var store = new JsonRestStore({target: "/Table/" }); 

    store.get(3).then(function(object){ 
     // CALLBACK HERE :-) 
    }); 

    store.query("foo=bar").then(function(results){ 
     // CALLBACK HERE :-) 
    }); 

    store.put({ foo: "bar" }, { id: 3 }); // NO CALLBACK CAPABILITIES ??? 

    store.remove(3); // NO CALLBACK CAPABILITIES ??? 
}); 

任何想法?

感谢

回答

2

您是否尝试过使用store.put({ foo: "bar" }, { id: 3 }).then(function(){});store.remove(3).then(function(){});?请检查these docsthis post

+0

你说得对。查看源代码可以发现返回的对象是Deferred。然而,一个错误(应该在Dojo 1.8中修复)使得无法取回标题响应,如下所示:'store.put({foo:“bar”},{id:3})。then(function(消息,ioArgs){});'在这里,'ioArgs'将是未定义的。 –

+0

var deferred = put(item);会返回延迟对象,然后你可以添加一个回调函数,并访问ioArgs中的xhr对象,如下所示:def.addCallback(function(mess,io){console.log(io); console.log(mess); console.log(def.ioArgs.xhr.getAllResponseHeaders()); }); –

1
put: function(object, options){ 
    // summary: 
    //  Stores an object. This will trigger a PUT request to the server 
    //  if the object has an id, otherwise it will trigger a POST request. 
    // object: Object 
    //  The object to store. 
    // options: dojo.store.api.Store.PutDirectives? 
    //  Additional metadata for storing the data. Includes an "id" 
    //  property if a specific id is to be used. 
    // returns: Number 
     .... 
     return xhr(....); 
    } 

该文档是错误的,返回实际上是一个dojo.Deferred如前所述。

预计函数原型阅读功能(responseText的,ioArgs)

+0

你说得对。但是,正如我在另一条评论中提到的那样,一个错误(应该在Dojo 1.8中修复)使得无法取回标题响应,如下所示:'store.put({foo:“bar”},{id:3 })。然后(函数(消息,ioArgs){});'在这里,'ioArgs'将是未定义的。 –

0

道场文件规定,对于加入新的项目,你应该使用POST,PUT作为对于更新商店。

相关问题