帖子
帖子
用户
博客
课程
显示全部楼层
63
帖子
0
勋章
518
Y币

[其他] 关于批量删除的语法问题

[复制链接]
发表于 2017-8-1 09:15:19
官网中有以下描述:
为了减少网络交互的次数太多带来的时间浪费, 您可以在一个请求中对多个对象进行 create/update/delete 操作.
在一个批次中每一个操作都有相应的方法、路径和主体, 这些参数可以代替您通常会使用的 HTTP 方法. 这些操作会以发送过去的顺序来执行, 比如我们要创建一系列的 GameScore 的对象:


但在示例中,只有对create的例子描述。其它两个靠我们猜猜猜,虽然尝试过多次,但还是没有成功。
我的代码如下:
                    api.ajax({
                        "url" : 'https://d.apicloud.com/mcm/api/batch',
                        "type" : "POST",
                        "headers" : {
                            "X-APICloud-AppId" : appId,
                            "X-APICloud-AppKey" : appCode
                        },
                        "encode" : true,
                        "cache" : false,
                        "data" : {
                            "requests" : [
                            {
                                    "method" : "POST",
                                    "dataType" : "json",
                                    "path" : '/mcm/api/heartRate/' + ret[0].id,
                                    "body" : {
                                            "_method" : "DELETE"
                                    }
                                }
                            ]
                        }
                    }, function(dret, derr) {})};   // 这是后面的代码,不贴了


1、appId正确,appCode已经加密
2、上述示例是拿一个值ret[0].id作为模板尝试,仍然没有成功
3、以下是控制台返回的错误信息:
[2017-08-01 09:07:50] [Android log] {"msg":"{\n  \"error\": {\n    \"name\": \"Error\",\n    \"status\": 404,\n    \"message\": \"There is no method to handle GET /batch\",\n    \"statusCode\": 404\n  }\n}","body":{"error":{"name":"Error","status":404,"message":"There is no method to handle GET /batch","statusCode":404}},"statusCode":404,"code":0}

求助,求正确!
4
帖子
0
勋章
3946
Y币
function saveBacthImageToFileByUIM() {
                var client = new Resource("A6939365558578", "DA320D66-B620-FEEC-68F4-CFA9A77CFFCF");
                var File = client.Factory("file");
                var UIMediaScanner = api.require('UIMediaScanner');
                UIMediaScanner.open({
                        type: 'picture',
                        column: 4,
                        classify: true,
                        max: 4,
                        sort: {
                                key: 'time',
                                order: 'desc'
                        },
                        texts: {
                                stateText: '已选择*项',
                                cancelText: '取消',
                                finishText: '完成'
                        },
                        styles: {
                                bg: '#fff',
                                mark: {
                                        icon: '',
                                        position: 'bottom_left',
                                        size: 20
                                },
                                nav: {
                                        bg: '#eee',
                                        stateColor: '#000',
                                        stateSize: 18,
                                        cancelBg: 'rgba(0,0,0,0)',
                                        cancelColor: '#000',
                                        cancelSize: 18,
                                        finishBg: 'rgba(0,0,0,0)',
                                        finishColor: '#000',
                                        finishSize: 18
                                }
                        },
                        scrollToBottom: {
                                intervalTime: 3,
                                anim: true
                        },
                        exchange: true,
                        rotation: true
                }, function(ret) {
                        if (ret) {
                                for (i = 0; i < ret.list.length; i++) {
                                        api.getPicture({}, function(ret1, err1) {
                                                File.save({
                                                        file: {
                                                                isFile: true,
                                                                path: ret.list[i].thumbPath,
                                                                values: {
                                                                        filename: "头像2.png"
                                                                }
                                                        }
                                                }, function(data1, err1) {
                                                        alert("file:\t" + JSON.stringify(data1));
                                                        alert("file:\t" + JSON.stringify(err1));
                                                });
                                        });
                                }
                        }
                });
        }



你用JS-SDK
63
帖子
0
勋章
518
Y币
zhiuzun 发表于 2017-8-1 09:53
function saveBacthImageToFileByUIM() {
                var client = new Resource("A6939365558578", "DA320D66-B620- ...

你的做法是循环里单个保存处理,我也尝试过这样做,但是,提交后台的请求过于密集,服务器处理出现延迟。另外,我的需求是,希望减少网络请求次数,即将前台的N个删除或者添加,一次提交给云数据库做处理。
4
帖子
0
勋章
2750
Y币
福大亨 发表于 2017-8-1 10:34
你的做法是循环里单个保存处理,我也尝试过这样做,但是,提交后台的请求过于密集,服务器处理出现延迟。 ...

https://community.apicloud.com/b ... hread&tid=17811

你看看这个
63
帖子
0
勋章
518
Y币
yvmer336366 发表于 2017-8-1 11:19
https://community.apicloud.com/bbs/forum.php?mod=viewthread&tid=17811

你看看这个

能否直言,谢谢!真心找不到问题在哪里
4
帖子
3
勋章
142
Y币
真想打你一顿,不好好看文档.....................................
文档例子
$.ajax({
      "url": "https://d.apicloud.com/mcm/api/batch",
      "type": "POST",
      "cache": false,
      "headers": {
        "X-APICloud-AppId": "{{your_app_id}}",
        "X-APICloud-AppKey": "{{加密后的key}}"
      },
      "data": {
        "requests": [{
            "method": "POST",
            "path": "/mcm/api/company",
            "body": {
                "name": "apicloud",
                "address": "北京市..."
            }
        },
        {
            "method": "POST",
            "path": "/mcm/api/company",
            "body": {
                "name": "百度",
                "address": "北京市西二旗"
            }
        }]
    }
}).done(function (data, status, header) {
      //success body
}).fail(function (header, status, errorThrown) {
      //fail body
})
看清楚data字段里面的requests数组里面的每一项的结构
{
            "method": "POST",
            "path": "/mcm/api/company",
            "body": {
                "name": "apicloud",
                "address": "北京市..."
            }
method和body是同一级的key body里面写数据库的字段,method才是方法
63
帖子
0
勋章
518
Y币
乱78糟2015 发表于 2017-8-1 13:55
真想打你一顿,不好好看文档.....................................
文档例子
$.ajax({

我一直用的是api.ajax,怎么也不成功。今天试着用另外帖子的说明$.ajax倒是成功了。不想用jquery,还是想api.ajax实现,愿“挨打”换可行的方法
3
帖子
0
勋章
4582
Y币
福大亨 发表于 2017-8-9 11:18
我一直用的是api.ajax,怎么也不成功。今天试着用另外帖子的说明$.ajax倒是成功了。不想用jquery,还是想 ...

你先单个AJAX请求成功,再写复杂的代码
63
帖子
0
勋章
518
Y币
xvetang 发表于 2017-8-9 11:22
你先单个AJAX请求成功,再写复杂的代码

单个AJAX,api.ajax的没有问题,增删改查都没有问题,但api.ajax的批量删除我怎么就领悟不了呢?请教了
0
帖子
0
勋章
3
Y币
  function fn_update_batch() {
        var s_id1 = $api.val($api.byId("s_id1"));
        var s_id2 = $api.val($api.byId("s_id2"));
        var client = new Resource("yourID", "yourKey");
        client.batch([{
            "method": "PUT",
            "path": "/mcm/api/student/" + s_id1,
            "body": {
                "s_name": "t11",
                "s_age": "111"
            }
        }, {
            "method": "PUT",
            "path": "/mcm/api/student/" + s_id2,
            "body": {
                "s_name": "t22",
                "s_age": "222"
            }
        }], function(ret, err) {
            if (err) {
                alert(JSON.stringify(err));
            } else {
                alert(JSON.stringify(ret));
            }
        })
    }

  function fn_delete_batch() {
        var s_id1 = $api.val($api.byId("s_id1"));
        var s_id2 = $api.val($api.byId("s_id2"));
        var client = new Resource("yourID", "yourKey");
        client.batch([{
            "method": "DELETE",
            "path": "/mcm/api/student/" + s_id1
        }, {
            "method": "DELETE",
            "path": "/mcm/api/student/" + s_id2
        }], function(ret, err) {
            if (err) {
                alert(JSON.stringify(err));
            } else {
                alert(JSON.stringify(ret));
            }
        })
    }
其实batch 都帮你写好了,只是替换下方法就可以了,已亲测成功
您需要登录后才可以回帖 登录

本版积分规则