web-dev-qa-db-ja.com

JSON出力がページのソースコードを返す

私はWordpressのプラグインACFのプラグイン/エクステンションを書きました。これはデフォルトのWP installにインストールされたときに必要なことをします。私は自分のウェブサイト上で機能が必要なのでこのプラグインを書きました。最近まで問題なく動作していましたが、私が気付いたときにはJSONエラーが発生しました(管理者以外としてログインした場合)。

JSONエラーは、「不明なSyntaxError:予期しないトークン<がJSONの1の位置にあります」というエラーです。これはエラーです。

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)

出力をデバッグすると(管理者としてログインしているとき)、予想どおりの結果が表示されます。予想出力(オランダを選択した場合):

[{"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"}]

出力をデバッグすると(非管理者としてログインしている場合)、JSONではなくページのソースコードが表示され、<はJSONでは許可されていないためエラーとして返されます。それは私には理にかなっています。

私が得られないのは、なぜそれが必要なものを返さないのです。 ajaxurlなどにアクセスできない、または適切なユーザー権限を持っていないことと関係があるかもしれませんが、 'Vanilla' WPインストールでテストするとすべてうまくいきます。

get_states関数を呼び出します (JSONエラーが発生します)

get_states関数

get_states_call関数

私はjson_encode($ items)の出力をデバッグするために各ページロードで呼び出されるget_states_call関数をコピーしました。それから私が期待する出力(各ユーザーの役割)を私に与えます、それではエコーと関数の呼び出しの間にどうやってエラーになるのでしょうか?

あなたが http://sd8.dutch-downhill.comに行くならあなたはそれを自分で見ることができます

login = Tom
pass = 654321

「プロフィールの追加」に進み、フォーム上の国を選択してください。

Get_statesを呼び出すコードの15行目にconsole.log(response);を追加しました。

1
Beee

私の最初の考えは正しかった。

 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.

ユーザーのリダイレクト(誤った場所で定義されている)を見落としていたので、それを見逃したため、管理者に許可されていないためユーザーは正しいページにリダイレクトされました。私がしなければならないのは、管理者Ajax URL用のIFを作成する方法を見つけることだけです。

1
Beee