Faq

1. Oprogramowałem pobieranie danych z JavaScriptu na mojej stronie:

var req = newXMLHttpRequest();

function newXMLHttpRequest() 
{
        var xmlreq = false;
        if (window.XMLHttpRequest) {
          xmlreq = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
          try { 
            xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
          } catch (e1) { 
            try  {
              xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e2) { }  } }
          return xmlreq;
}

pobierz();

function pobierz()
{
    var url = "http://quizz.pl/api.php?method=listallv1&limit=10";
    alert(url);
    req.onreadystatechange = pobrane;
    req.open( "GET", url, true );
    req.send();
}

function pobrane()
{
    if ( req.readyState != 4 ) return;
        var result = req.responseText;
        if( result != '' )
        {
               //sukces
            alert( result );
        }
        else
        {
            alert( "Error: " + result ); 
        }
}

Ale ten kod nie działa. Co zrobić?

Przeglądarki nie pozwalają kodowi JavaScript na komunikację z serwerem z innej domeny. Wywołując kod powyższy na swojej stronie odwołujesz się do serwera quizz.pl na co przeglądarka nie pozwala. Aby ominąć ten problem musisz wrzucić na swój serwer proxy API tj. plik PHP o takiej treści:

<?

$ip=$_SERVER['REMOTE_ADDR'];

$aURL = "http://quizz.pl/api.php";

if (count($_POST) > 0)
{
    $url = $aURL;

    $fields_string = "";
    foreach($_POST as $key=>$value) 
    { 
      $fields_string .= $key.'=' . urlencode($value) . '&'; 
    }
    $fields_string = rtrim($fields_string,'&');

    $fields_string .= ($fields_string == "") ? "" : "&";
    $fields_string .= "remote_addr=" . $ip; 

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, 1); //count($fields));
    curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string);
    curl_setopt($ch, CURLOPT_HTTPHEADER,array (
        "Expect: "
    ));

    $result = @curl_exec($ch);

    echo $result;
}
else
{
  $request = $_SERVER["REQUEST_URI"];  
  $request .= ($request == "") ? "" : "&";
  $request .= "remote_addr=" . $ip; 
  echo file_get_contents($aURL . $request);
}

?>

i zmienić wywołania z quizz.pl/api.php na twoja_domena.pl/api.php. Analogiczny plik możesz wykonać w każdym innym języku po stronie serwera.

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License