web-dev-qa-db-fra.com

Poste JSON avec champ d'en-tête HTTP personnalisé

J'ai hérité d'un code qui fera éventuellement partie d'un appel API. Sur la base du code existant, l'appel est une publication permettant de récupérer le code JSON avec un code d'accès. Bien que cela soit normalement simple et comme toutes les autres API existantes, ce code nécessite la création d'un champ httpheader personnalisé pour le secret du client. 

J'ai pu faire fonctionner ce travail dans Objective C avec URLRequest, etc., mais maintenant que je crée l'appel d'un composant Web, j'ai été bloqué. 

J'utilise un poste jquery assez standard

        $.post('https://url.com', 
        {access_token:'XXXXXXXXXXXXXXXXXXX',
         function(data){
           console.info(data);
         }, 'json');

Avec un HTTP-EQUIV dans l'en-tête. Mais la poste ne récupère jamais de données et le serveur lui-même ne reconnaît pas qu’un appel a été passé (même incomplet).

Je vais peut-être devoir supprimer ce code et recommencer, mais si quelqu'un a déjà rencontré ce problème, merci de bien vouloir lui donner un aperçu. 

33
Izzy

Ce que vous avez posté comporte une erreur de syntaxe, mais cela ne fait aucune différence, car vous ne pouvez pas transmettre d’en-têtes HTTP via $.post().

Si vous utilisez la version jQuery> = 1.5, passez à $.ajax() et transmettez l’option headers ( docs ). (Si vous utilisez une ancienne version de jQuery, je vais vous montrer comment le faire via l'option beforeSend.)

$.ajax({
    url: 'https://url.com',
    type: 'post',
    data: {
        access_token: 'XXXXXXXXXXXXXXXXXXX'
    },
    headers: {
        Header_Name_One: 'Header Value One',   //If your header name has spaces or any other char not appropriate
        "Header Name Two": 'Header Value Two'  //for object property name, use quoted notation shown in second
    },
    dataType: 'json',
    success: function (data) {
        console.info(data);
    }
});
110
JAAulde

si on veut utiliser .post () then cela définira les en-têtes de toutes les futures requêtes faites avec jquery

$.ajaxSetup({
    headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }
});

faites ensuite vos appels .post () normalement.

11
Maulik Gangani

J'ai essayé comme vous l'avez mentionné, mais seul le premier paramètre passe et tous les autres apparaissent sur le serveur sous la forme undefined Je passe JSONWebToken dans le cadre de l'en-tête.

.ajax({
    url: 'api/outletadd',
    type: 'post',
    data: { outletname:outletname , addressA:addressA , addressB:addressB, city:city , postcode:postcode , state:state , country:country , menuid:menuid },
    headers: {
        authorization: storedJWT
    },
    dataType: 'json',
    success: function (data){
        alert("Outlet Created");
    },
    error: function (data){
        alert("Outlet Creation Failed, please try again.");        
    }

    });
1
user1842926

Je voulais juste mettre à jour ce fil pour les futurs développeurs. 

JQuery> 1.12 Prend maintenant en charge la possibilité de modifier chaque élément de la demande via JQuery.post ($ .post ({...}). Voir la deuxième signature de fonction dans https://api.jquery.com/jquery. post/

0
mriera