2016-04-13 13 views
0

Ich verstehe, dass AJAX nicht zwischen zwei verschiedenen Domänen arbeiten kann. Ich muss JSON-Daten von einer Webseite zu einer anderen Domäne senden, die eine PHP-Seite hat, die diese JSON-Daten in einer Datenbank aufzeichnet.AJAX Sende JSON Zeichenfolge an eine andere Domäne

Was ich versuchte, war AJAX verwenden, um mit einer lokalen PHP-Datei zu kommunizieren, dann haben Sie diese PHP-Datei POST zu den Ziel-Domänen PHP-Datei.

Mein AJAX-Code:

$.ajax({ 
    url: './remote.php', 
    type: 'POST', 
    data: { 
     sentdata: data 
    }, 
    success: function(response) { 
     document.getElementById("responseMsg").innerHTML = response; 
    } 
}); 

My Local PHP-Datei remote.php:

$url = "https://example.com/destination.php"; 
$data = json_encode(($_POST['sentdata'])); 
$build = array('http' => 
    array(
     'method' => 'POST', 
     'header' => "Content-type: application/x-www-form-urlencoded\r\n", 
     'content' => $data 
    ) 
); 
$context = stream_context_create($build); 
$return = file_get_contents($url, false, $context); 
if($return) { 
    echo "success"; 
} else { 
    echo "failure"; 
} 

In destination.php auf der Domain zu erreichen Ich versuche, ich habe:

$data = json_decode(file_get_contents('php://input')); 
echo $data; 

Wenn es läuft, sehe ich es Echo "Fehler". Die Datei_get_contents ($ url, false, $ Kontext); bekommt nichts zurück.

Gibt es einen Grund, warum diese Strategie für das Ausführen von AJAX in einer anderen Domäne nicht funktioniert? Oder mache ich etwas falsch?

EDIT: Ich überprüfte auch allow_url_fopen

+0

Ist das '= =' nur ein Tippfehler? '$ url = =" https://example.com/destination.php ";' – Marcus

+0

Und du machst eigentlich keinen AJAX * -Anruf * an eine andere Domain. Sie rufen './Remote.php' an, vermutlich auf derselben Domain, die wiederum über andere Methoden auf einen externen Server zugreift, z. 'file_get_contents()' – Marcus

+0

Ja = = war ein Tippfehler, ich habe es korrigiert. Marcus, mein Verständnis ist, dass AJAX dir nicht erlauben wird, den Anruf direkt an den externen Server zu richten, also war das mein Versuch, das zu umgehen. Ich verstehe Es ist technisch kein AJAX-Anruf zu einer anderen Domäne. – Mitch

Antwort

0

in php.ini auf gesetzt wurde Sie PHP cURL für das Senden, dass die JSON-Daten in einer anderen Domäne verwenden kann. Verwenden Sie AJAX, um mit einer lokalen PHP-Datei zu kommunizieren, wobei sich unter dieser Datei Ihre cURL-Funktion zum Speichern und Zurückgeben der Antwort befindet.

Hier ist die PHP cURL doc, um loszulegen.

+1

Ich werde es untersuchen. Vielen Dank! Gibt es einen Grund, warum meine oben genannte Methode nicht funktioniert? – Mitch

+0

vielleicht destination.php hat nicht die richtigen Berechtigungen –

-1

Ich glaube, Sie sollten ROTATION etwas aus der URL $ url bekommen verwenden = = „https://example.com/destination.php

+0

Wie die andere Antwort erwähnt cURL scheint wie eine gute Option, aber im Moment bin ich neugierig, warum diese Methode, die ich angezeigt würde nicht funktionieren? – Mitch

0

Es stellt sich heraus, alles habe ich geschrieben funktioniert. Es gab später Probleme in meiner externen Server-PHP-Datei, die dazu führten, dass es fehlschlug. Nach weiterer Fehlersuche stellt sich heraus, dass dies nicht das Problem war.

Wie andere bereits erwähnt haben, wäre cURL auch dafür eine großartige Lösung. Dies funktioniert jedoch einwandfrei und erfordert keine cURL.