it-swarm.com.de

Wie macht man einen Jsonp? POST Anfrage, die contentType mit jQuery angibt?

Ich muss eine jsonp POST - Anforderung mit dem Inhaltstyp 'application/json' erstellen. Ich kann die POST -Anforderung folgendermaßen an den Server richten:

      jQuery.ajax({
        type: 'POST',
        url: url,
        data: data,
        success: success,
        error: error,
        async: true,
        complete: complete,
        timeout: TIMEOUT,
        scriptCharset: 'UTF-8',
        dataType: 'jsonp',
        jsonp: '_jsonp',
      });

Sobald ich jedoch die folgende Zeile hinzufüge: contentType: "application/json", wird sie als OPTIONS-Anfrage und nicht als POST gesendet.

Wie kann ich den Inhaltstyp angeben und die Anforderung trotzdem als POST absenden?

37
Marcus

Es ist nicht möglich, eine JSONP-Anforderung POST auszuführen.

JSONP erstellt ein <script>-Tag, das Javascript von einer anderen Domäne aus ausführt. Es ist nicht möglich, eine POST - Anforderung mit einem <script>-Tag zu senden.

51
SLaks

Verwenden Sie json in dataType und senden Sie es wie folgt:

        $.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);
            }
        });

und fügen Sie diese Zeilen in Ihre serverseitige Datei ein:

wennPHP:

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

wenn Java:

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

Es gibt eine (Hack) -Lösung, die ich schon viele Male gemacht habe. Sie können mit JsonP posten .. (Sie können ein Formular veröffentlichen, das größer ist als 2000 Zeichen, als Sie von GET verwenden können.)

Clientanwendung Javascript

$.ajax({
  type: "POST", // you request will be a post request
  data: postData, // javascript object with all my params
  url: COMAPIURL, // my backoffice comunication api url
  dataType: "jsonp", // datatype can be json or jsonp
  success: function(result){
    console.dir(result);
  }
});

Java:

response.addHeader( "Access-Control-Allow-Origin", "*" ); // open your api to any client 
response.addHeader( "Access-Control-Allow-Methods", "POST" ); // a allow post
response.addHeader( "Access-Control-Max-Age", "1000" ); // time from request to response before timeout

PHP:

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

Auf diese Weise öffnen Sie Ihren Server für jede Post-Anfrage. Sie sollten dies erneut durch Angabe von ident oder etwas anderem sichern.

Mit dieser Methode können Sie auch den Anfragetyp von jsonp in json ändern. Beide funktionieren, indem Sie einfach den richtigen Antwortinhaltstyp einstellen

jsonp

response.setContentType( "text/javascript; charset=utf-8" );

json

response.setContentType( "application/json; charset=utf-8" );

Bitte nicht, dass Ihr Server die SOP (gleiche Origin-Richtlinie) nicht mehr respektiert, aber wen interessiert das?

1
Dimitri Kopriwa