2016-05-12 4 views
4

Ich bin eine PUT-Methode wie folgt Senden (mit Chrom-Kontrolle):Reactjs redux: Fetch PUT Methode nur eine OPTIONS-Methode zu senden, auch wenn der Status 200

function checkStatus(response) { 
    if (response.status >= 200 && response.status < 300) { 
    console.log("status: ", response.statusText); 
    return response 
    } else { 
    var error = new Error(response.statusText) 
    error.response = response 
    throw error 
    } 
} 

import fetch from 'isomorphic-fetch' 
return dispatch => { 
     dispatch(requestPosts(data)); 
     return fetch('/trendings', { 
      method: 'PUT', 
      headers: { 
       'Accept': 'application/json', 
       'Content-Type': 'application/json', 
       Authorization: Config.token 
      }, 
      body: JSON.stringify(data), 
     }) 
     .then(checkStatus) 
     .then(reponse => { 
      console.log('request succeeded with JSON response', data); 
      dispatch(successSent("The output list has been successfully sent!")); 
     }).catch(err => { 
      console.log('request failed', err); 
      dispatch(failSent("Error on sending request: " + err)); 
     }); 

und das Problem ist, dass es eine ist die Rückkehr OPTIONS-Methode nur mit Status 200

Das Problem ist, dass es mit der PUT-Methode folgen sollte. Darüber hinaus sollte ein Fehler zurückgegeben werden, da der API-Endpunkt noch nicht bereit ist.

Fehle ich etwas?

+0

Möchten Sie uns die API zeigen? –

Antwort

2

Sie müssen credentials: 'same-origin' hinzuzufügen und die 'Content-Type' : 'application.json' von Header-Liste seit isomorphic-fetch doesn't seem to handle it well zu vermeiden dieses Problem ansonsten wird die erste isormophic-fetch nur löst die OPTION Anfrage zu holen Informationen über den Server (es ist der Standard-Browser-Verhalten für Querursprungsanforderungen) zu entfernen :

import fetch from 'isomorphic-fetch' 
return dispatch => { 
     dispatch(requestPosts(data)); 
     return fetch('/trendings', { 
      method: 'PUT', 
      headers: { 
       'Accept': 'application/json', 
       'Authorization': Config.token 
      }, 
      credentials: 'same-origin', // you need to add this line 
      body: JSON.stringify(data), 
     }) 
     .then(checkStatus) 
     .then(reponse => { 
      console.log('request succeeded with JSON response', data); 
      dispatch(successSent("The output list has been successfully sent!")); 
     }).catch(err => { 
      console.log('request failed', err); 
      dispatch(failSent("Error on sending request: " + err)); 
     }); 
+0

Vielen Dank für Ihre Antwort. Ich habe es versucht, aber es scheint, dass es immer noch auf der "OPTIONS" -Methode stecken bleibt, mit Status 200. Seltsam! –

+0

Ok, vielleicht könntest du versuchen, die '' Content-Type ':' application/json''from-Header-Liste zu entfernen. 'OPTION' ist die natürliche Anfrage, die vom Browser für eine Crossorigin-Anfrage ausgelöst wird, aber' isomorphic-fetch' scheint einige Schwierigkeiten zu haben, den obigen Header gut zu handhaben. Ich habe meine Antwort aktualisiert. – Pcriulan

Verwandte Themen