Ne pouvez pas envoyer une requête post quand le "Content-Type" est réglé sur "application/json"
Je suis en train de travailler sur un Réagir application et je suis en utilisant fetch pour envoyer une demande. J'ai fait un formulaire d'inscription récemment et maintenant je suis l'intégration de l'API. Auparavant, l'API accepté url des données codées et il était tout fonctionne bien. mais maintenant que les besoins ont changé et l'API accepte les données en JSON, j'ai dû changer le contenu de l'en-tête de type de "application/x-www-form-urlencoded' "application/json". Mais j'obtiens l'erreur suivante:
Chercher de l'API ne peut pas charger http://local.moberries.com/api/v1/candidate.
Réponse à la demande de contrôle en amont ne passent pas de contrôle d'accès: Aucun
"Access-Control-Allow-Origin' en-tête est présent sur le demandé
de la ressource. Origine " http://localhost:3000 ' est donc pas permis
d'accès. Si opaque réponse répond à vos besoins, définition de la demande de
en mode "non-scro' pour aller chercher la ressource avec la SCRO désactivé.
J'ai même mis le "Access-Control-Allow-en-Têtes" dans l'API, mais il ne fonctionne toujours pas. Voici le code pour le côté client:
sendFormData() {
let {user} = this.props;
var formData = {
first_name: ReactDOM.findDOMNode(this.refs.firstName).value,
last_name: ReactDOM.findDOMNode(this.refs.lastName).value,
city: ReactDOM.findDOMNode(this.refs.currentCity).value,
country: ReactDOM.findDOMNode(this.refs.currentCountry).value,
is_willing_to_relocate: user.selectedOption,
cities: relocateTo,
professions: opportunity,
skills: skills,
languages: language,
min_gross_salary: minSal,
max_gross_salary: maxSal,
email: ReactDOM.findDOMNode(this.refs.email).value,
password: ReactDOM.findDOMNode(this.refs.password).value
};
var request = new Request('http://local.moberries.com/api/v1/candidate', {
method: 'POST',
mode: 'cors',
headers: new Headers({
'Accept': 'application/json',
'Content-Type': 'application/json'
})
});
var requestBody = JSON.stringify(formData);
console.log(requestBody);
fetch(request, {body: requestBody})
.then(
function (response) {
if (response.status == 200 || response.status == 201) {
return response.json();
} else {
console.log('Failure!', response.status);
}
}).then(function (json) {
var responseBody = json;
console.log(typeof responseBody, responseBody);
});
}
Et ici est le code de l'API:
class Cors
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
->header('Access-Control-Allow-Headers: Origin, Content-Type, application/json');
}
}
Je ne peux vraiment pas comprendre le problème. De l'aide sera appréciée.
Parce que c'est local. Vous ne pouvez pas y accéder.
OriginalL'auteur Arslan Tariq | 2016-08-17
Vous devez vous connecter pour publier un commentaire.
Il s'avère que la SCRO permet seulement certains des types de contenu spécifiques.
Source: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
Pour définir le type de contenu à être "application/json", j'ai dû mettre un type de contenu personnalisé en-tête dans l'API. Juste enlevé le dernier en-tête et a ajouté ceci:
et il est travail est du tout bon.
Content-Type
àtext/plain
afin de le faire fonctionner. L'ajout de ces en-têtes dans l'API de réponse à côté serveur n'a pas aidé. Je suis à l'aide d'IBM a ÉTÉ 8559. Il semble que son API n'est pas en mesure de fournir les en-têtes de réponse pour leOPTIONS
méthode utilisée dans le cadre de la SCRO contrôlé demandes.OriginalL'auteur Arslan Tariq
Vous violez le 'Même La Politique De L'Origine'. Un site web http://www.example.com ne peut jamais être en mesure de charger les ressources à partir de n'importe quel site web http://www.example.net autres que de lui-même.
Cours de développement, mais parfois on a besoin pour être en mesure de le faire. Pour contourner ce:
OriginalL'auteur Abdul Wasae