订单过滤器数组和使用javascript更新过滤订单的请求PUT方法

订单过滤器数组和使用javascript更新过滤订单的请求PUT方法,javascript,arrays,rest,object,shopify-api,Javascript,Arrays,Rest,Object,Shopify Api,我很难想出如何过滤和更新过滤订单上的API: 在Shopify orders面板中,我调用了一个API,得到了所有订单的列表。我实现了仅使用put方法更新1个数组,但它不是动态的。所以基本上我想做的是: 顺便说一句,这都是javascript 获取所有订单的api调用,然后过滤同时具有加拿大国家/地区和空白电话号码的订单,然后在具有加拿大和空白号码的订单上,我尝试使用PUT方法更新这些订单,将号码更改为“虚拟号码”,但无法仅将其应用于具有加拿大和空白号码的订单。我得到了所有的命令,我得到了6个命

我很难想出如何过滤和更新过滤订单上的API:

在Shopify orders面板中,我调用了一个API,得到了所有订单的列表。我实现了仅使用put方法更新1个数组,但它不是动态的。所以基本上我想做的是:

顺便说一句,这都是javascript

获取所有订单的api调用,然后过滤同时具有加拿大国家/地区和空白电话号码的订单,然后在具有加拿大和空白号码的订单上,我尝试使用PUT方法更新这些订单,将号码更改为“虚拟号码”,但无法仅将其应用于具有加拿大和空白号码的订单。我得到了所有的命令,我得到了6个命令的对象数组。这是到目前为止我的代码


   $(document).ready(function () {
// this is valid url and returns all orders
  var api_url = "https://($api-domain-bla-bla)/admin/api/2020-10/orders.json?status=any.json";

  $.ajax({
    url: api_url,
    contentType: "application/json",
    dataType: "json",
    success: function (result) {
      console.log(result);
//       get all orders phone country
      let orders = result.orders;
      console.log(orders);
      for(let i = 0; i < orders.length;i++) {
        let phone = orders[i].shipping_address.phone;
        let country = orders[i].shipping_address.country;
//    here i am trying to filter them right away but don't know how to make array of filter objects
//    the if statement works
        if ( country === "Canada" && phone === '') {
            // over here i am trying to do something to those objects which if statement is true.
            let filteredOrder = orders[i].concat
            console.log(orderId);
            // a function with parameter of the filtere objects variable, to the api PUT method to update 
            // the filter orders/objects
            checkCountry(filteredOrder);
        }
//         console.log(phone);
//         console.log(country);
        
//         checkPhone(phone, country);      
      }

    },
  });
});

抱歉,如果我说得不清楚,有什么帮助吗?

我不确定您想要完成什么。我的理解是:

  • 您正在发出API请求以获取订单列表
  • 您希望筛选该列表中来自加拿大但没有电话号码的订单
  • 您想要编辑带有虚拟电话号码的筛选列表,并将这些更改放到服务器上
  • 我不太了解获取/下达订单的api是如何编写的,所以我想的可能不是很有效。我会在地图上标出所有订单,并在没有电话号码的情况下更改加拿大订单

    orders = orders.map(order=>{
      let {country, phone } = order.shipping_address
      if(country === "Canada" && phone === ''){
        order.shipping_address.phone = '0000000'
      }
      return order
    })
    
    而不是把过滤器都放进去

    $.ajax({
              method: "PUT",
              url: api_url_post,
              contentType: "application/json",
              crossDomain: true,
              dataType: "json",
              data: JSON.stringify(orders),
              success: function (data, status, jqXHR) {
                  alert("success");// write success in " "
              },
      
              error: function (jqXHR, status) {
                  // error handler
                  console.log(jqXHR);
                  alert('fail' + status.code);
              }
           });
    
    可能有一种方法可以选择性地更新符合您标准的每个订单,但我不知道您正在使用的api

        $(document).ready(function () {
      var api_url = "https://api-blalbla/admin/api/2020-10/orders.json?status=any.json";
    
      $.ajax({
        url: api_url,
        contentType: "application/json",
        dataType: "json",
        success: function (result) {
          console.log(result);
    //       get all orders phone country
          let orders = result.orders;
          console.log(orders);
          orders = orders.map(order=>{
            let {country, phone } = order.shipping_address
            if(country === "Canada" && phone === ''){
            order.shipping_address.phone = '0000000'
            checkCountry(order, orders)
                console.log(orders);
                console.log(order);
            }
            else {
              return order
            }
          
            
            
    })
        },
      });
    });
    
    function checkCountry(filteredOrder, allOrders) {
         
        var api_url_post = "https://api-blalbla/admin/api/2020-10/orders.json?status=any.json";
        
    //     var phone = {
    //         "orders": 
    //           {
    // //               "id": 1843613401136,
    // //               "phone": "+0000000000",
    //                  "shipping_address": {
    //                  "phone": "0000000000"
    //           }
    //           },
    //       }
        $.ajax({
              method: "PUT",
              url: api_url_post,
              contentType: "application/json",
              crossDomain: true,
              dataType: "json",
              data: JSON.stringify(allOrders),
              success: function (data, status, jqXHR) {
                  alert("success");// write success in " "
              },
      
              error: function (jqXHR, status) {
                  // error handler
                  console.log(jqXHR);
                  alert('fail' + status.code);
              }
           });
                
    }
    
    这是我到目前为止的代码,试图将所有订单放到数据中,就像u所说的一样,在put请求中仍然存在相同的错误

    另外,我认为你可以通过id获得特定的订单

    /admin/api/2020-10/orders/{order_id}.json
    

    所以mby我得到过滤后的订单id,并在url上输入参数,然后用电话“00000”更新订单。应该这样吗?

    是的,就是这样

    Also, I figured that u can get specific order by id
    
    /admin/api/2020-10/orders/{order_id}.json
    So mby i get the filtered order id and put in parameter on url and update that order with phone "00000". Should this work?
    
    非常感谢,这段代码帮助了我,我非常感激!)


    更新:是否只有从阵列中获取第一个订单

    // mby like except .map to [0]
    orders = orders[0](order=>{
      let {country, phone } = order.shipping_address
      if(country === "Canada" && phone === ''){
        order.shipping_address.phone = '0000000'
      }
      return order
    })
    
    我像这样需要它,这样如果商店有2万张订单,它就不会检查所有订单。只有第一个(制造的最新的一个)

       orders = orders.map(order=>{
      let {country, phone } = order.shipping_address
      if(country === "Canada" && phone === ''){
        order.shipping_address.phone = '0000000'
      }
      return order
    })
    
    // mby like except .map to [0]
    orders = orders[0](order=>{
      let {country, phone } = order.shipping_address
      if(country === "Canada" && phone === ''){
        order.shipping_address.phone = '0000000'
      }
      return order
    })