jQuery AJAX Cross-Domain-Problem
Im bereitgestellten Szenario, in dem zwei PHP-Dateien (test.php und testserver.php) miteinander kommunizieren Durch das AJAX von jQuery treten domänenübergreifende Einschränkungen auf, wenn sie sich auf separaten Servern befinden. Server A hostet test.php (z. B. localhost), während Server B testserver.php (z. B. Webserver) hostet.
Problem:
Trotz erfolgreicher Ausführung der AJAX-Anfrage Wenn sich die Dateien auf demselben Server befinden, schlägt der Vorgang mit einer Fehlermeldung fehl, wenn sie sich auf verschiedenen Servern befinden. Dies liegt an der Same-Origin Policy (SOP).
Lösung:
Um dieses domänenübergreifende Problem zu beheben, wird JSONP (JSON mit Padding) eingesetzt. JSONP nutzt Rückrufe, um Browsereinschränkungen zu umgehen.
Implementierung:
jQuery (test.php):
$.ajax({ url: "http://domain.example/path/to/file/testserver.php", dataType: 'jsonp', // Notice! JSONP (lowercase 'P') success: function(json){ // Handle JSON response (an array) alert("Success"); }, error: function(){ alert("Error"); } });
PHP (testserver.php):
<?php $arr = array("element1","element2",array("element31","element32")); $arr['name'] = "response"; $callbackName = $_GET['callback']; // Get the callback name from GET params echo $callbackName."(".json_encode($arr).");"; ?>
Erklärung: