2016-05-17 4 views
0

Недавно я обновил свой PHP и код, который использовался для анализа моего PHP, до того, как Ajax перестала работать. Я изменил мой PHP использовать PDO и должен был изменить свое возвращение заявление с помощью jsoncallback просто JSon закодировать:Ошибка Parsing AJAX

<?php 
    header('Content-type: application/json'); 


    $con = new PDO('mysql:host=localhost;dbname=db;charset=utf8mb4;''root', 'pass', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 


    $sql = "SELECT idlocations, name, latitude, longitude FROM `locations`"; 
    $con->query("SET NAMES utf8"); 
    $result = $con->query($sql); 


    $records = array(); 

    if($result !== false) 
    { 
     $records = $result->fetchAll(PDO::FETCH_ASSOC); 

     print_r($records); 
     //$_GET['jsoncallback'] . '(' . json_encode($records) . ');'; 

     echo json_encode($records); 
    } 
    else 
    { 
     print_r($con->errorInfo()); 
    } 
    ?> 

Код выше вернет следующее:

Array 
    (
     [0] => Array 
     (
       [idlocations] => 1 
       [name] => BierMarkt 
       [latitude] => -79.3708 
       [longitude] => 43.6473 
     ) 

     [1] => Array 
     (
       [idlocations] => 2 
       [name] => jacks 
       [latitude] => -79.4200 
       [longitude] => 43.6555 
     ) 

) 
     [{"idlocations":"1","name":"BierMarkt","latitude":"-79.3708","longitude":"43.6473"},{"idlocations":"2","name":"jacks","latitude":"-79.4200","longitude":"43.6555"}] 

Однако, когда я пытаюсь использовать Ajax вызова из JavaScript, я получаю следующее сообщение об ошибке:

[объект Object]: parsererrorSyntaxError: Неожиданное фишку в JSON в положении 0

JS :

function populateLocations() 
    { 
     console.log("inside populate"); 
     //Get other locations from the DB 
     $.ajax({ 
       url:'http://localhost/VibeSetter/services/getlocations.php', 
       type: 'POST', 
       dataType: "json", 
       timeout: 5000, 
     success: function(data, status) 
     { 
      console.log("inside success"); 
      $.each(data, function(i,item) 
      { 
       console.log("inside index"); 
       console.log("item.longitude"); 
       //pass to function to fill array 
       populateLocationsArray(i+1,item.name, item.longitude, item.latitude); 

      }); 
     }, 

     error: function(e, ts, et) { console.log(e + " : " + ts + et) } 
    }); 
    } 

     function populateLocationsArray(i, name, long, lat) 
     { 
      locations[i] = new Array(); 
      locations[i][0] = name; 
      locations[i][1] = long; 
      locations[i][2] = lat; 
     } 

Может кто-нибудь, пожалуйста, помогите мне понять, почему я не могу правильно разобрать вывод с моего php? Я пробовал много разных методов, включая удаление 'dataType: "json" и использование JSON.parse по результатам.

Заранее спасибо

+0

Снимите 'print_r ($ записей),' как создает недопустимую JSON. Вы хотите только вывести 'echo json_encode ($ records);' – Sean

ответ

0

Есть несколько ошибок в коде, такие как:

  • Смотрите следующую строку,

    $con = new PDO('mysql:host=localhost;dbname=db;charset=utf8mb4;''root', 'pass', ... 
                       ^missing comma 
    

    Должно быть,

    $con = new PDO('mysql:host=localhost;dbname=db;charset=utf8mb4;','root', 'pass', ... 
    
  • Удалите это заявление print_r($records); из вашего кода.

  • Смотреть это заявление,

    print_r($con->errorInfo()); 
    

    Поскольку вы ожидаете объект JSON в качестве ответа от сервера, вы должны кодировать информацию об ошибке массива. Должно быть,

    echo json_encode($con->errorInfo()); 
    

Так что ваш код должен быть таким:

<?php 
    header('Content-type: application/json'); 

    $con = new PDO('mysql:host=localhost;dbname=db;charset=utf8mb4;','root','pass', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 

    $sql = "SELECT idlocations, name, latitude, longitude FROM `locations`"; 
    $con->query("SET NAMES utf8"); 
    $result = $con->query($sql); 


    $records = array(); 
    if($result !== false){ 
     $records = $result->fetchAll(PDO::FETCH_ASSOC); 
     echo json_encode($records); 
    }else{ 
     echo json_encode($con->errorInfo()); 
    } 
?> 
+0

Привет, я добавил ваш код и произошла ошибка, даже при печати $ con> errorinfo(); Возвращаемая ошибка теперь: [object Object]: parsererrorError: jQuery1113014746108321211326_1463615437202 не был вызван – Mark

+0

@Mark, запустите только PHP-код - это отдельная страница и посмотрите, какую ошибку вы получаете. Кроме того, в вашем сценарии jQuery вы нигде не определили «местоположения», поэтому оператор 'locations [i] = new Array();' будет вызывать эту ошибку, * ReferenceError: местоположения не определены *. –