2017-03-28 16 views
1

Je suis tout à fait certain que tous les arguments que j'ai passés dans register() ont des valeurs. C'est le code js.SyntaxError: Jeton inattendu <dans JSON à la position 0 à JSON.parse (<anonymous>) - AngularJS

$scope.register = function(
    $reg_code, $prov_code, $citymun_code, $brgy_code, $street, 
    $user_name, $user_email, $user_contact, $user_password 
) { 
    //displays the arguments 
    alert("region: " + $reg_code + ", province: " + $prov_code + ", citymun: " + $citymun_code + ", barangay: " 
    + $brgy_code + ", street: " + $street + ", user_name: " + $user_name + ", user_email: " + $user_email + ", user_contact: " 
    + $user_contact + ", user_password: " + $user_password); 

    $http({ 
     method: "POST", 
     url: "http://" + host + "/mobile/register.php", 
     data: JSON.stringify({ 
      user_password_reg: $user_password, 
      user_email_reg: $user_email, 
      user_contact_reg: $user_contact, 
      user_name_reg: $user_name, 
      region: $reg_code, 
      province: $prov_code, 
      citymun: $citymun_code, 
      barangay: $brgy_code, 
      street: $street, 
      echo: "1", 
      success: "0", 
      user_acc_type: "log account" 
     }), 
     headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
    }).then(function(res) { 
      alert("success1: " + res.data.success1 + ", success2: " + res.data.success2 + ", success3: " + res.data.success3); 
    }); 


} 

C'est le script php

<?php 
    header('Access-Control-Allow-Origin: *'); 
    header('Content-Type: application/json; charset=utf-8'); 

    //converts data to post 
    $postData = file_get_contents("php://input"); 
    $post = json_decode($postData); 


    $echo = array(); 
    $echo["success1"] = 0; 
    $echo["success2"] = 0; 
    $echo["success3"] = 0; 

    if(isset($post["region"]) && 
     isset($post["province"]) && 
     isset($post["citymun"]) && 
     isset($post["barangay"]) && 
     isset($post["street"]) && 
     isset($post["user_password_reg"]) && 
     isset($post["user_name_reg"]) && 
     isset($post["user_email_reg"]) && 
     isset($post["user_contact_reg"]) 
    ) { 
     $echo["success1"] = 1; 
     $echo["success2"] = 1; 
     $echo["success3"] = 1; 

    } else { 

     $echo["success1"] = 2; 
     $echo["success2"] = 2; 
     $echo["success3"] = 2; 
    } 

    echo json_encode($echo); 
?> 

Ce programme est toujours pas complète. Je voulais d'abord m'assurer que le php obtenait tous les bons paramètres de la publication et renvoie ou echo une bonne valeur. Cependant, dans ce code, je reçois cette erreur dans la console.

SyntaxError: Unexpected token < in JSON at position 0 
    at JSON.parse (<anonymous>) 
    at fromJson (ionic.bundle.js:9892) 
    at defaultHttpResponseTransform (ionic.bundle.js:17406) 
    at ionic.bundle.js:17491 
    at forEach (ionic.bundle.js:9150) 
    at transformData (ionic.bundle.js:17490) 
    at transformResponse (ionic.bundle.js:18216) 
    at processQueue (ionic.bundle.js:22016) 
    at ionic.bundle.js:22032 
    at Scope.$eval (ionic.bundle.js:23228) 

si < est lu dans la sortie du json php, cela signifie qu'il y a une erreur sur la partie du code de php. Il m'est assez difficile de déboguer le code php puisque l'AngularJS analyse automatiquement les données du php. Par conséquent, je ne peux pas voir les détails de l'erreur. Et d'ailleurs je doute vraiment que ce simple script PHP aurait une erreur.

Merci d'avance.

+0

Vérifiez simplement la réponse dans la console * Réseau * de votre navigateur. Pourquoi affichez-vous des données JSON en tant que 'application/x-www-form-urlencoded'? Si c'est pour garder la demande * simple *, je voudrais juste aller avec 'text/plain' – Phil

+0

pas sûr de l'utilisation de' x-www-form-urlencoded' .. –

+0

Vous devriez savoir pourquoi vous utilisez le code que vous écrire – Phil

Répondre

2

Votre code PHP provoque probablement une erreur entraînant une réponse HTML.

Ceci est probablement dû au fait que vous essayez d'accéder à des propriétés d'objet comme indices de tableau, ce qui déclenche quelque chose comme

Fatal error: Cannot use object of type stdClass as array

Modifier votre code à

$post = json_decode($postData, true); 

Voir http://php.net/manual/function.json-decode.php#refsect1-function.json-decode-parameters


Je suppose également que vous utilisez Content-Type: application/x-www-form-urlencoded t o conservez la demande simple. Je recommanderais plutôt text/plain car vos données ne sont certainement pas encodées en URL.

$http.post("http://" + host + "/mobile/register.php", { 
    user_password_reg: $user_password, 
    user_email_reg: $user_email, 
    user_contact_reg: $user_contact, 
    user_name_reg: $user_name, 
    region: $reg_code, 
    province: $prov_code, 
    citymun: $citymun_code, 
    barangay: $brgy_code, 
    street: $street, 
    echo: "1", 
    success: "0", 
    user_acc_type: "log account" 
}, { 
    headers: { 'Content-type': 'text/plain' } 
}) 
+0

Ok, je vais essayer. Merci monsieur .. –

+0

Merci beaucoup monsieur cela a fonctionné enfin :) hehe. –