JQuery REST PUT запрос не работает в моем коде? - PullRequest
0 голосов
/ 26 сентября 2018

Я просто хочу сделать запрос PUT с помощью jQuery в Jira.Я пробовал это раньше с SoapUI и там он работает, но в моем файле JS он не работает ... Он всегда возвращает мне ошибку (предупреждение с "нет" в моем случае).

Вот мойкод:

var issueKey = this.JIRA.Issue.getIssueKey();
var username = "admin";
var password = "admin";
var encodedLoginData = btoa(username + ":" + password);

AJS.$.ajax({
    type: 'PUT',
    contentType: 'application/json',
    url: '/jira/rest/api/2/issue/' + issueKey,
    dataType: 'json',
    async: false,
    headers: { 'Authorization': 'Basic ' + encodedLoginData },
    data: JSON.stringify('{"update":{"timetracking":[{"edit":{"originalEstimate":"4m","remainingEstimate":"3m"}}]}}'),
    success: function(response){ alert("yes"); },
    error: function(error){ alert("no"); }
});

Как уже упоминалось, фраза данных JSON работает в SoapUI, а также в качестве информации для входа и шифрования base64.Это все правильно.Но я не могу найти свою ошибку ... Есть идеи?

РЕДАКТИРОВАТЬ:

PUT http://localhost:2990/jira/rest/api/2/issue/TEST-3 400
XMLHttpRequest.send @   batch.js?devtoolbar=…logged-in=true:5461
send    @   batch.js?locale=en-US:197
ajax    @   batch.js?locale=en-US:191
calculate   @   batch.js?devtoolbar=…logged-in=true:5620
prepareCalculation  @   batch.js?devtoolbar=…logged-in=true:5620
(anonymous) @   batch.js?devtoolbar=…logged-in=true:5620
dispatch    @   batch.js?locale=en-US:104
h   @   batch.js?locale=en-US:96
trigger @   batch.js?locale=en-US:101
simulate    @   batch.js?locale=en-US:108
e   @   batch.js?locale=en-US:114

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Я думаю, что ваша проблема в том, что параметр вашего JSON.stringify не должен быть строкой.Попробуйте сохранить это в переменную, а затем сделайте JSON.stringify этого.

Примите во внимание результат JSON.stringify.Например:

 JSON.stringify("{}"); //""{}""

 JSON.stringify({}); //"{}"

Теперь ваш код должен быть таким, например:

var issueKey = this.JIRA.Issue.getIssueKey();
var username = "admin";
var password = "admin";
var encodedLoginData = btoa(username + ":" + password);
var dataObject = {"update":{"timetracking":[{"edit":{"originalEstimate":"4m","remainingEstimate":"3m"}}]}};

AJS.$.ajax({
    type: 'PUT',
    contentType: 'application/json',
    url: '/jira/rest/api/2/issue/' + issueKey,
    dataType: 'json',
    async: false,
    headers: { 'Authorization': 'Basic ' + encodedLoginData },
    data: JSON.stringify(dataObject),
    success: function(response){ alert("yes"); },
    error: function(error){ alert("no"); }
});
0 голосов
/ 26 сентября 2018

Бывает, что ваша ошибка в том, что вы пытаетесь структурировать строку

data: JSON.stringify('{update...}')

В настоящее время вам не нужен jQuery для выполнения HTTP в браузере.Все современные браузеры поставляются с Fetch API , встроенным в

const issueKey = this.JIRA.Issue.getIssueKey();
const username = "admin";
const password = "admin";
const encodedLoginData = btoa(username + ":" + password);

const body = {
  update: {
    timetracking: [{
      edit: {
        originalEstimate: "4m"
        remainingEstimate: "3m"
      }
    }]
  }
}

fetch(`/jira/rest/api/2/issue/${issueKey}`, {
  method: 'PUT',
  body: JSON.stringify(body),
  headers: {
    'Authorization': 'Basic ' + encodedLoginData
    'Content-Type': 'application/json',
  },
})
  .then(response => alert('yes'))
  .catch(error => alert('no'));
0 голосов
/ 26 сентября 2018

Если это сервер IIS, вам может потребоваться отключить WebDAV, поскольку он захватывает все запросы PUT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...