Hey guys,

Ik ben met een API maken voor een project dat ik heb. Om de basis te zetten probeer ik een simpele request uit te voeren. Dit doe ik door middel van AJAX en Laravel 4.2. Echter kamp ik nu met wat issues. De applicatie staat op app.moldersmedia.nl. De juiste URL voor de request is: http://app.moldersmedia.nl/api/key/value/license.json

Ik heb lokaal 2 domeinen: default.dev en app.dev. Op app.dev draait de API en op default.dev probeer ik data te ontvangen van de app.dev in json. Lokaal werkt dit prima, maar zodra ik data wil ontvangen van de live omgeving krijg ik wel mijn json string te zien, maar met heel veel HTML erbij en de melding "parse error" unexpected >. Dit is logisch want er zit HTML bij. Kan iemand mij uitleggen waar het fout gaat met mijn code? Het laatste stukje HTML kan je in een document plaatsen, deze geeft de console errors terug.


Server bestanden online:

.htaccess


<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>


<IfModule mod_headers.c>
    Header add Access-Control-Allow-Origin "*"
    Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
    Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
</IfModule>



Controller:

        public function license($value)
	{
                $array = ['test' => 'Nummer oneindigt'];
                return json_encode($array);
        }



CODE OM AJAX REQUEST UIT TE VOEREN:


<html>
    <head>
        <title>Test API Function</title>

        <script src="//code.jquery.com/jquery-1.10.2.js"></script>
    </head>

<body>
<script>
    $site 	= "http://app.moldersmedia.nl/api/key/value/license.json";
    // $site 	= "http://app.dev/api/key/value/license.json";
    
    $(document).ready(function() {
        $.ajax({
            url: $site,
            crossDomain: true,
            data: 'my_request_is=foo',
            method: 'GET',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            success: function(json){
        		alert('Request is geslaagd')
            },
            error: function(jqxhr, textStatus, error){
                console.log(jqxhr);
                console.log(textStatus);
                console.log(error);
            }
        });
    });
</script>
</body>
</html>
Lokaal werkt dit prima, maar zodra ik data wil ontvangen van de live omgeving

Begrijp ik het goed dat je probeert vanuit je live omgeving terug te communiceren met je lokale omgeving? Dat gaat toch nooit werken?
Dat werkt wel want je host file is aangepast. Je vraagt data op en je server denkt op dat moment dat je gewoon een website bent. Ik verstuur op de 1 of andere manier dubbele headers maar waar dat zit? Geen idee?
Donny Wie weet op 18/07/2015 21:52:17
Dat werkt wel want je host file is aangepast. Je vraagt data op en je server denkt op dat moment dat je gewoon een website bent. Ik verstuur op de 1 of andere manier dubbele headers maar waar dat zit? Geen idee?

Dus je communiceert helemaal niet naar buiten toe (en weer terug), alles gebeurt lokaal?

EDIT: kijk eens of je vanaf lokale host A uberhaupt lokale host B kunt vinden, of andersom.
Ik heb het probleem gevonden. Mn server accepteerde het niet doordat ik een header vergat mee te sturen aan de "allowed headers"...

Header set Access-Control-Allow-Headers "origin, x-requested-with, content-type, accept"

Het laatste woord: accept :)

Thanks voor de reactie thomas :)
Het kan ook helpen -omdat je, als ik het goed begrijp, crossite AJAX requests doet- om json[color=#ff0000]p[/color] te gebruiken in plaats van json.

Gelukkig werkt mijn geheugen beter dan de zoekfunctionaliteit op deze site, jammergenoeg is er niet zoiets als een ledenlijkst, maar FabianW had destijds een reeks vragen over het aanroepen van een spotify API. Dat werkte ook niet helemaal tot deze kleine maar doorslaggevende wijziging.

(holy shit, ik moest naar zijn profiel googlen om deze te vinden; wat een drama lol)

Reageren