55 votes

Comment utiliser le type: "POST" dans un appel jsonp ajax

J'utilise JQuery ajax jsonp. J'ai sous le code JQuery:

  $.ajax({  
        type:"GET",        
        url: "Login.aspx",  // Send the login info to this page
        data: str, 
        dataType: "jsonp", 
        timeout: 200000,
        jsonp:"skywardDetails",
        success: function(result)
        { 
             // Show 'Submit' Button
            $('#loginButton').show();

            // Hide Gif Spinning Rotator
            $('#ajaxloading').hide();  
         } 

    });  
 

Le code ci-dessus fonctionne correctement. Je souhaite simplement envoyer la demande sous la forme "POST" au lieu de "GET" . Veuillez indiquer comment procéder.

Merci

87voto

Nick Craver Points 313913

Vous ne pouvez pas POST en utilisant JSONP ... cela ne fonctionne tout simplement pas de cette façon, il crée un élément <script> pour récupérer des données ... qui doit être une requête GET. Il n'y a pas grand chose que vous puissiez faire à part poster sur votre propre domaine en tant que proxy qui poste sur l'autre ... mais l'utilisateur ne pourra pas le faire directement et voir une réponse.

39voto

Pratik Butani Points 4290

Utilisez json en dataType et envoyez comme ceci:

     $.ajax({
        url: "your url which return json",
        type: "POST",
        crossDomain: true,
        data: data,
        dataType: "json",
        success:function(result){
            alert(JSON.stringify(result));
        },
        error:function(xhr,status,error){
            alert(status);
        }
    });
 

et mettez ces lignes dans votre fichier côté serveur:

si PHP:

 header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Max-Age: 1000');
 

si java:

 response.addHeader( "Access-Control-Allow-Origin", "*" ); 
response.addHeader( "Access-Control-Allow-Methods", "POST" ); 
response.addHeader( "Access-Control-Max-Age", "1000" );
 

7voto

Tgr Points 11766

Les navigateurs modernes autorisent les requêtes AJAX inter-domaines, il est appelé partage de ressources entre origines (voir également ce document pour une introduction plus courte et plus pratique), et les versions récentes de jQuery le prennent en charge immédiatement; vous avez cependant besoin d’une version de navigateur relativement récente (FF3.5 +, IE8 +, Safari 4+, Chrome4 +; aucun support Opera n’a été pris en charge autant que je sache).

2voto

-4voto

CG_DEV Points 71

! OK j'avoue que je me suis trompé sur celui-ci. !

Vous pouvez poster en utilisant jsonp, je le fais tout le temps.

J'utilise ajax shortcode,

 $.post("SOMEURL",{var1Name:var1Val,var2Name:var2Val},function(data){

  alert(data);
  //do something with data here

},'jsonp');
 

Selon le navigateur, il peut changer automatiquement en $ _POST ou $ _GET lors de sa réception par le serveur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X