2016-02-21 7 views
0

Я пытаюсь создать расширение, которое добавляет 2 поля на страницу продукта администратора для покупки, чтобы добавить метафилд.Купить Расширение Chrome для администратора

Я знаю, что есть некоторые расширения, такие как ShopifyFD и CustomFields, но мой действительно, очень простой, я отнюдь не пытаюсь его скопировать, это очень обычай для моего магазина shopify.

Все, что я хочу, это добавить к странице 2 конкретных метафила и сохранить их, когда я нажму кнопку «Сохранить».

Это говорит, что все уже работает, но у меня проблема во время POST/PUT. Он сохраняет статус возврата '303 См. «Другое» и перенаправляет меня на логин, поведение, с которым я не сталкиваюсь ни с одним из двух расширений, которые я цитировал в начале. Я задаюсь вопросом, является ли подход, который я использую, проблемой или тем, что еще может быть, поэтому я располагаю ресурсами для вашей помощи.

здесь как заголовок выглядит следующим образом:

Request URL:https://mywebsite.myshopify.com/admin/products/461395295/metafields/9911129091.json 
Request Method:PUT 
Status Code:303 See Other 
Remote Address:23.227.38.70:443 

Как я уже говорил, я использовал другой подход, ShopifyFD или CustomFields, вместо загрузки сценария, я использую скрипт контента.

здесь, как мой манифест выглядеть:

"content_scripts": [ 
     { 
      "all_frames": true, 
      "matches": [ 
       "https://*.myshopify.com/admin/products/*" 
      ], 
      "run_at": "document_end", 
      "js": [ 
       "scripts/vendors/jquery.js", 
       "scripts/vendors/handlebars-v3.0.0.js", 
       "scripts/vendors/handlebars-helpers.js", 
       "scripts/utils.js", 
       "scripts/shopify-product-addon.js" 
      ] 
     } 
    ] 

1 - я заменить текущую кнопку Сохранить на новый, так что я могу сохранить metafields перед отправкой нативной формы 2 - я прилагаю к POST/PUT метод новой кнопки Save я заменил

здесь, как мой пост/пут выглядит:

Примечание: запись значения я экономлю.

  var metaJSON; 

      if (record.update) { 
       metaJSON = { 
        'metafield': { 
         'id': record.metafield_id, 
         'value': record.value, 
         'value_type': record.value_type 
        } 
       } 

       method = 'PUT'; 
       url = '/admin/' + route_url + '/metafields/' + record.metafield_id + '.json'; 
      } else { 
       metaJSON = { 
        'metafield': { 
         'namespace': record.namespace, 
         'key': record.key, 
         'value': record.value, 
         'value_type': record.value_type 
        } 
       }; 


       url = '/admin/' + route_url + '/metafields.json'; 
       method = 'POST'; 
      } 

      $.ajax({ 
       type: method, 
       url: url, 
       data: metaJSON, 
       dataType: 'json', 
       success: function(d) { 
        console.log('SUCCESS'); 
       }, 
       error: function(d) { 
        console.log('ERROR');   
       } 
      }); 

Проблема в том, что она терпит неудачу каждый раз. Интересно, что случилось. Является ли метод, который я использую?

Я занимаюсь почти так же, как ShopifyFD, когда вы отправляете/помещаете в ajax api, просто не знаете, чего не хватает. единственное различие, которое я нашел, это то, что в ShopifyFD есть файл cookie, установленный на request_method = PUT или request_method = POST. Я не знаю, как этот cookie установлен, потому что он не в скрипте. Я даже пытался установить его вручную, но он не работает.

Как вы можете видеть, я пробовал почти все.

Есть ли у кого-нибудь еще какие-либо предложения? : P

Благодаря

ответ

0

я не понять это, почему ShopifyFD работает, я бы очень хотел, чтобы понять, ты, но я нашел еще один способ заставить его работать.

Перед запросом заголовка необходимо установить токен CSRF.

Работает как очарование!

$.ajax({ 
    type: method, 
    url: url, 
    data: metaJSON, 
    beforeSend: function (request) { 
     var token = $("meta[name=csrf-token]").attr('content'); 
     request.setRequestHeader("X-CSRF-Token", token); 
    }, 
    . 
    . 
    . 
Смежные вопросы