【问题标题】:Dojo : How to make PUT request on jsonRest store with callback methodDojo:如何使用回调方法在 jsonRest 存储上发出 PUT 请求
【发布时间】:2012-04-30 14:58:06
【问题描述】:

我正在使用 Dojo JsonREST 存储与服务器上的 RESTful API 进行通信。 GET 和 QUERY 方法与异步回调处理程序一起工作得很好。然而,在 JsonREST 存储上发布新对象的 PUT 请求似乎没有异步回调功能。只有当 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 ???
});

有什么想法吗?

谢谢

【问题讨论】:

    标签: javascript json rest dojo


    【解决方案1】:

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

    【讨论】:

    • 你是对的。查看源代码会发现返回的对象是 Deferred。然而,一个错误(应该在 Dojo 1.8 中修复)使得无法取回标头响应,如下所示:store.put({ foo: "bar" }, { id: 3 }).then(function(message, ioArgs){}); 这里,ioArgs 将是未定义的。
    • var deferred = put(item);将使您返回延迟对象,然后您可以添加回调并访问 ioArgs 中的 xhr 对象,例如: def.addCallback(function(mess,io){ console.log(io); console.log(mess); console.日志(def.ioArgs.xhr.getAllResponseHeaders()); });
    【解决方案2】:
    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( ....);
        }
    

    文档有误,return 实际上是一个 dojo.Deferred 就像刚才所说的那样。

    期望函数原型读取函数(responseText, ioArgs)

    【讨论】:

    • 你是对的。然而,正如我在另一条评论中提到的,一个错误(应该在 Dojo 1.8 中修复)使得无法取回标头响应,如下所示:store.put({ foo: "bar" }, { id: 3 }).then(function(message, ioArgs){}); 这里,ioArgs 将是未定义的。
    【解决方案3】:

    dojo 文档指出,要添加新项目,您应该使用 POST,因为 PUT 用于更新商店。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2012-02-29
      相关资源
      最近更新 更多