Avatar billede xpartyxoverx Nybegynder
29. marts 2016 - 11:11 Der er 7 kommentarer og
1 løsning

PHP & Ajax opfører sig på 2 forskellige måder på localhost & mit eksterne host

Jeg har et website, jeg har bygget en masse CRUD op i Ajax & Jquery..

Problemet er, når jeg ligger det op på min VPS opfører Ajax'en ikke som på mit localhost.. Det resulterede så i at jeg ville prøve at lave et simpelt Ajax script med en simpel PHP Api. Og fandt så ud af efter min lille test at den stadigvæk opfører sig ret spooky og anderledes når jeg vil kører scriptet...

Jeg har sikret mig at jeg har installeret JSON osv. på min VPS/host

På min Windows PC, hvor jeg udvikler osv. har jeg installeret XAMPP med PHP Version 5.6.15

På min Linux VPS er der installeret PHP Version 5.3.3

Jeg skulle mene at dette ikke har noget at sige...

I mit test script som også opfører sig underligt, når jeg kører det op på min VPS har jeg disse 2 filer:
main.html (som er den HTML side med Ajax scriptet der kalder APIen)
api.php


api.php:
<?php

header("Access-Control-Allow-Origin: *");

header('content-type: application/json; charset=utf-8');
//header('Content-type: application/javascript; charset=utf-8');


if(isset($_GET["action"])){
    $action = mysql_real_escape_string($_GET["action"]);

    if($action == "getlist")
    {
        if(isset($_POST["Key"])){
            if($_POST["Key"] == "abc321"){
                $sendResponse = array(

                    "Status" => "OK",
                    "TestObject" => array(
                            "elm1" => "værdi1",
                            "elm2" => "værdi2"
                        ),
                    "PHPMicroTime" => "".microtime()."",
                    "Message" => "Ajax kaldet lykkedes"
                );
            } else {
                $sendResponse = array(
                    "Status" => "Error",
                    "Message" => "Ajax kaldet fejlede",
                    "PHPMicroTime" => "".microtime().""
                    );
            }
        }
    }
}


if(!isset($sendResponse)){
    $sendResponse = array(
        "Status"=>"OK",
        "Message"=>"RestAPI ready",
        "PHPMicroTime" => "".microtime().""
        );
}

if(isset($sendResponse)){
    if(isset($_GET["dump"])){
        print var_dump($sendResponse);
    } else {
        print json_encode($sendResponse);
    }
}

?>


main.html
<html>
<head>
    <title></title>
    <script src="https://code.jquery.com/jquery-2.2.2.min.js" integrity="sha256-36cp2Co+/62rEAAYHLmRCPIych47CvdM+uTBJwSzWjI=" crossorigin="anonymous"></script>
</head>
<body>

    <button onclick="TestAjaxRequest()">Ajax kald</button>

    <div id="console"></div>

    <script type="text/javascript">

    function WriteToConsole(Txt)
    {
        if(Txt != ""){

            Txt = "<pre>"+Txt+"</pre>";
        }

        $('#console').html(Txt);
    }

    function TestAjaxRequest()
    {
        $.ajax({
              method: "POST",
              dataType: "json",

              url: "api.php?action=getlist",
              data: { Key: "abc321" }
            })
              .done(function( response ) {
                if(response.Status == "OK"){
                    WriteToConsole( "Status:OK\nSvar: " + response.Message + "\nPHP Microtime: "+response.PHPMicroTime );
                } else {
                    WriteToConsole( "Fejl: " + response.Message );
                }

              });
    }

    $(document).ready(function() {

    });
    </script>

</body>
</html>


Ja, mit spørgsmål er således: hvad er årsagen til at de opføre sig forskelligt?
Avatar billede keysersoze Guru
29. marts 2016 - 11:40 #1
Hvordan opfører det sig anderledes?
Avatar billede xpartyxoverx Nybegynder
29. marts 2016 - 11:54 #2
Altså.. Forskellen på de 2 forskellige Ajax outputs ved localhost og mit eksterne host

På mit localhost får jeg dette ud i min "konsol"/div-tag
Status:OK
Svar: Ajax kaldet lykkedes
PHP Microtime: 0.00858900 1459243022


Og på min VPS/eksterne host:
Status:OK
Svar: RestAPI ready
PHP Microtime: 0.41615400 1459244979

Altså. Man skulle tro at $sendResponse ikke var sat når den kommer op på serveren.. Og det er den jo.

Faktisk var det ikke meningen at jeg skulle udskrive Microtime på "RestApi ready"-tingen, det gjorde jeg imidlertidigt, for at teste om den kunne udskrive værdien og det kunne den - også på mit eksterne host, men bare ikke efter hensigten..
Avatar billede xpartyxoverx Nybegynder
29. marts 2016 - 11:55 #3
Den skulle jo gerne sige "Ajax kaldet lykkedes" på begge (lokalt & eksternt)
Avatar billede xpartyxoverx Nybegynder
29. marts 2016 - 11:59 #4
Har også lige opgraderet til PHP 5.6 på min server, uden nogen ændring i opførsel af scriptet
Avatar billede Slater Ekspert
29. marts 2016 - 12:53 #5
Hvor langt ned i din if-struktur kommer den? Første skridt i en sådan situation er at finde punktet hvor den dør. Lav f.eks. en "die('test');" i starten af filen og flyt den gradvis efter if-sætningerne og se hvornår du ikke længere ser den.

Umiddelbart bud er at det har noget at gøre med din brug af den forældede mysql-extension, som er deprecated i PHP 5.6. Prøv også at ændre din escape til mysqli_real_escape_string() - bemærk i'et.
Avatar billede xpartyxoverx Nybegynder
29. marts 2016 - 13:26 #6
Du har fuldstændig ret, viperine. Den havde jeg ikke lige tænkt nærmere over.. Efter jeg har fjernet mysql_real_escape_string fungere det faktisk som det skal på serveren. Må finde ud af hvorfor den også gør det samme i det projekt som jeg har problemer med, det er bare et ret omfattende projekt, som jeg skal udtænke hvordan jeg lige skal pensle ud.

Jeg er nok nødt til at bruge PHP 5.3 i mit projekt, da jeg bruger mysql funktioner (ikke mysqli)

Bør jeg ikke lukke dette spørgsmål og give points?
Avatar billede Slater Ekspert
29. marts 2016 - 13:31 #7
Hvis du føler dit spørgsmålet er besvaret ordentligt, jo.
Avatar billede xpartyxoverx Nybegynder
29. marts 2016 - 14:16 #8
Tjoeh altså ville ønske det var det "rigtige" projekt jeg fik til at virke.... Jeg har uploadet en lille video, hvor jeg viser mit problem...
https://www.youtube.com/watch?v=Um9wer3GL4o

Åbner gerne en ny tråd, hvis nogen har nogle idéer til hvad løsningen kunne være, eller evt. problemet.. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester