web-dev-qa-db-fra.com

La sortie JSON renvoie le code source de la page

J'ai écrit un plugin/extension pour le plugin ACF de Wordpress, qui fait ce qu'il doit faire lorsqu'il est installé sur une installation par défaut de WP. J'ai écrit ce plugin parce que j'avais besoin de la fonction sur mon propre site web. Cela a fonctionné là-bas sans aucun problème jusqu'à récemment, quand j'ai remarqué qu'il génère une erreur JSON (lorsque vous êtes connecté en tant que non-administrateur).

L'erreur JSON est "Uncaught SyntaxError: Jeton inattendu <dans JSON en position 1". Il s'agit de l'erreur:

Uncaught SyntaxError: Unexpected token < in JSON at position 1
    at JSON.parse (<anonymous>)
    at city-selector.js?ver=0.4:15
    at Object.success (city-selector.js?ver=0.4:64)
    at j (jquery.js:3099)
    at Object.fireWith [as resolveWith] (jquery.js:3211)
    at x (jquery.js:8264)
    at XMLHttpRequest.<anonymous> (jquery.js:8605)

Lorsque je débogue la sortie (lorsque je suis connecté en tant qu'administrateur), cela me montre exactement ce à quoi je m'attendais. Résultats attendus (lors de la sélection des Pays-Bas):

[{"country_code":"","state_code":"","state_name":"Select a province\/state"},{"country_code":"NL","state_code":"DR","state_name":"Drenthe"},{"country_code":"NL","state_code":"FL","state_name":"Flevoland"},{"country_code":"NL","state_code":"FR","state_name":"Friesland"},{"country_code":"NL","state_code":"GE","state_name":"Gelderland"},{"country_code":"NL","state_code":"GR","state_name":"Groningen"},{"country_code":"NL","state_code":"LI","state_name":"Limburg"},{"country_code":"NL","state_code":"NB","state_name":"Noord-Brabant"},{"country_code":"NL","state_code":"NH","state_name":"Noord-Holland"},{"country_code":"NL","state_code":"OV","state_name":"Overijssel"},{"country_code":"NL","state_code":"UT","state_name":"Utrecht"},{"country_code":"NL","state_code":"ZE","state_name":"Zeeland"},{"country_code":"NL","state_code":"ZH","state_name":"Zuid-Holland"}]

Lorsque je débogue la sortie (lorsque je suis connecté en tant que non-administrateur), il me montre le code source de la page à la place du JSON et renvoie donc une erreur car <n'est pas autorisé dans JSON. Cela a du sens pour moi.

Ce que je ne comprends pas, c'est pourquoi il ne retourne pas ce dont il a besoin. Je pensais que cela pouvait être dû au fait de ne pas pouvoir accéder à ajaxurl ou de ne pas avoir les droits d'utilisateur appropriés, mais lorsque je le teste dans une installation 'Vanilla' WP, tout fonctionne.

appelle la fonction get_states (qui lève l'erreur JSON)

Fonction get_states

Fonction get_states_call

J'ai copié la fonction get_states_call à appeler à chaque chargement de page pour déboguer la sortie de json_encode ($ items). Ensuite, il me donne le résultat que j'attends (sur chaque rôle d'utilisateur), alors comment peut-il entrer en erreur entre l'écho et l'appel de la fonction?

Vous pouvez le voir vous-même si vous allez sur http://sd8.dutch-downhill.com

login = Tom
pass = 654321

Allez à "Ajouter un profil" et sélectionnez un pays sur le formulaire.

J'ai ajouté un console.log(response); à la ligne 15 dans le code qui appelle get_states.

1
Beee

Ma pensée initiale était correcte.

 I thought it might have something to do with not being able to access the
 ajaxurl or so or not having the proper user rights.

J'avais oublié une redirection d'utilisateur (définie à un endroit incorrect), d'où la raison pour laquelle je l'ai manquée et donc un utilisateur a été redirigé vers la page correcte, car il/elle n'est pas autorisé dans l'administrateur. Tout ce que j'ai à faire est de trouver un moyen de créer un IF pour l'admin ajax url.

1
Beee