使用Redux-saga中的Fetch发布表单数据

时间:2017-04-26 09:02:42

标签: reactjs react-native ecmascript-6 redux-saga

var formData = new FormData(loginRequestObject);
formData.append('userName', loginRequestObject.username);
formData.append('password', loginRequestObject.password);
formData.append('mobile', loginRequestObject.mobile);
formData.append('deviceid', deviceInfo.getDeviceId())

这是我正在制作的请求 -

和身体部位

  try{
const response = yield call(fetch, Url, {
  method : 'POST',
  headers : {
    'Accept': 'application/json, application/xml, text/plain, text/html, *.*',
    'Content-Type' :'multipart/form-data, application/x-www-form-urlencoded; charset=utf-8'
  },
  body : formData
}) 
if(response.ok) {
  const jsonResponse = yield response.text()
  yield put(LoginActions.loginSuccess(jsonResponse))
} else {
  const jsonResponse = yield response.text();
  yield put(LoginActions.loginFailure(jsonResponse))
}

我发这个请求发布数据但是我无法做到,这是什么原因?

3 个答案:

答案 0 :(得分:0)

首先,没有promise function处理您的POST请求的响应。你用这个实现的代码得到了什么错误?当您不在多个部分发送数据时,为什么使用multipart/form-data?从您的代码中看,您发送的图片数据看起来并不像multipart

您的问题没有提供足够的详细信息来提供任何具体答案,请详细说明您所遇到的错误。

答案 1 :(得分:0)

我认为您应该将fetch函数与另一个函数包装在一起,这是一个适合您的演示

const fetchFunc = ({ url, options }) => {
   return fetch(url, options);
}

const response = yield call(fetchFunc, {
     url: Url,
     options {
        method : 'POST',
        headers : {
          'Accept': 'application/json, application/xml, text/plain, text/html, *.*',
          'Content-Type' :'multipart/form-data, application/x-www-form-urlencoded;charset=utf-8',
        },
        body : formData
    }
}); 
if(response.ok) {
   const jsonResponse = yield response.text()
   yield put(LoginActions.loginSuccess(jsonResponse))
} else {
   const jsonResponse = yield response.text();
   yield put(LoginActions.loginFailure(jsonResponse))
}

答案 2 :(得分:-2)

我刚删除了Content-Type,但它已经有效了。