Как я могу создать тело запроса POST в React Native не со строковым json, а с json?

Я работаю над заменой некоторого нативного кода на реагирующий нативный. Ожидаемый запрос POST (реализованный в AFNetworking) в Charles должен быть таким:

AFNetworking POST

Фрагмент кода:

NSError *err;
NSData *paramData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:&err];
NSData *paramData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:&err];   
NSString *paramString = [[NSString alloc] initWithData:paramData encoding:NSUTF8StringEncoding];
NSDictionary *param = @{@"data":paramString};
AFHTTPRequestOperation *operation = [manager POST:URLString parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) {
    if (successBlock) {
        successBlock(responseObject);
    }
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    DebugLog(@"%zd", operation.response.statusCode);
    if (failureBlock) {
        failureBlock(operation, error);
    }
}];

А вот запрос от Fetch API версии такой:

получить сообщение

Фрагмент кода:

export default async (url, param) => {
  var result = await fetch(url, {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'text/html',
    },
    body: JSON.stringify({ 
      'data': JSON.stringify(param) 
    })
  })
  .then(response => checkStatus(response))
  .then(response => response.json())
  .catch(e => { throw e; });

  return result;
}

Мой вопрос, как я могу отправить сообщение в fetch точно так же, как в AFNetworking? Это стоило мне много времени. Спасибо!!

обновлено: основное отличие заключается в надоедливых косых чертах и ​​их структуре данных тела, нативная — json (data: paramString), а js — строка.


person Benjamin Wen    schedule 17.07.2017    source источник
comment
Если вы хотите получить ответ JSON, есть ли причина, по которой вы вместо этого отправляете заголовок запроса Accept: text/html? Потому что это просит сервер отправить вам HTML-ответ, верно? Не JSON…   -  person sideshowbarker    schedule 17.07.2017
comment
Нет необходимости вводить строку param в body   -  person Engineer    schedule 17.07.2017
comment
@Engineer, но API сервера запрашивает эту структуру, как вы можете видеть в моем коде Objective-C.   -  person Benjamin Wen    schedule 17.07.2017
comment
@sideshowbarker, это не имеет ничего общего с запросом, а только определяет данные ответа. А в text/html хорошо работает в нативной реализации.   -  person Benjamin Wen    schedule 17.07.2017


Ответы (1)


Наконец, мой коллега нашел решение. Тело запроса должно быть построено таким образом:

body: 'data=' + JSON.stringify(param)
person Benjamin Wen    schedule 19.07.2017