2016-09-09 4 views
2

Я пытаюсь отправить запрос POST в API с помощью API-интерфейсов API javascript. Все работает отлично в Chrome, FF, IE 11 (используйте polyfill), но не работает в Microsoft Edge (Консоль & Вкладки в сети пустые). Он работает только тогда, когда я посылаю латинский текст в качестве параметров. Например, когда я запускаю этот код:Fetch API не работает с неанглийскими символами в Microsoft Edge

fetch(API_URL, { 
    method: 'POST', 
    body: JSON.stringify({ str: '테스트'}) 
}) 
.then((data) => console.log(data)) 
.catch((err) => { 
    console.error('fetch error:', error); 
    throw error; 
}); 

Он ничего не делает, но когда я изменить значение «ул» в «какой-то латинский текст», то он работает нормально (отправляет правильный запрос API & получить ответ).

Любая помощь будет оценена по достоинству.

UPDATE # 1:

выпуск на веб-сайте Microsoft: fetch() with unicode characters in request body fails with TypeMismatchError

+0

Что делать, если вы задали кодирующие заголовки? – diegoaguilar

+0

@diegoaguilar, что именно заголовки вы имеете в виду? – Inf

+0

Что именно означает «не работает»? Вы получили сообщение об ошибке? Получает ли ваш сервер какой-либо запрос? – Bergi

ответ

2

Внутри строки JavaScript кодируются как UTF-16. Похоже, что Edge не конвертирует в другую кодировку по умолчанию и бросает TypeMismatchError, если он считает ваше тело несовместимым с настроенным (или предполагаемым?) Content-type.

Исправление этой проблемы является избежать всех символов не-ASCII в представлении JSON полезной нагрузки:

function encodePayload(payload) { 
    return JSON.stringify(payload). 
     replace(/[\u007F-\uFFFF]/g, function (c) { 
      return "\\u" + ("0000" + c.charCodeAt(0).toString(16)).substr(-4); 
     }); 
} 

fetch(API_URL, { 
    method: 'POST', 
    body: encodePayload({ str: '테스트'}) 
}) 

 Смежные вопросы

  • Нет связанных вопросов^_^