2017-03-15 7 views
0

いくつかの助けを借りて、ユーザーをデータベースに追加する前にユーザーのパスワードを検証して確認するフォームを作成しました。Uncaught SyntaxError:JSONの位置0の予期しないトークン

at Object.success (confirm3.php:29)

は、この次の行に

var data = JSON && JSON.parse(response) || $.parseJSON(response); 

を参照しているエラーを

Uncaught SyntaxError: Unexpected token in JSON at position 0
at JSON.parse()
at Object.success (confirm3.php:29)
at i (jquery.min.js:2)
at at A (jquery.min.js:4)
at XMLHttpRequest. (jquery.min.js:4)

:私は、ユーザーのデータが送信されないよう、いくつかの問題が発生したため、私に次のエラーを与えていますPOST変数

$UserNm=$_POST["UserNm"]; 
$UserId=$_POST["UserId"]; 
$UserPwd=$_POST["UserPwd"]; 

明確にするために、返されるデータは、ストアドプロシージャから取得される$ReturnMessageです。 $ReturnMessageは、正常動作と異常動作の両方の動作のステータスを表示します。

$ReturnMessageの例:

"USER ID EXIST. (011 CODE)."
"USER ID MINT20 ADDED."

POSTメソッドが使用されます。if(isset($_POST['Submit'])) {

$ ReturnMessage:

if(isset($ReturnStatus) && $ReturnStatus==1) { 
$ReturnMessage=odbc_result($stmt,'ReturnMessage'); 
} 
} 

$ReturnMessage = utf8_encode ($ReturnMessage); 
echo json_encode($ReturnMessage); 
} 

スクリプト:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 

<script type="text/javascript"> 
$(function() { 
    $("#myForm").on("submit", function(e) { 
    e.preventDefault(); 
    var password = $("#UserPwd").val(); 
    var confirmPassword = $("#ConfirmPassword").val(); 
    console.log(password,confirmPassword) 
    if ($.trim(password) === password && 
     password !== "" && 
     password === confirmPassword) { 
     $.ajax({ 
     url: "confirm3.php", 
     method: "POST", 
     data: { Submit: "true" }, 
     success: function(response) { 
      var data = JSON && JSON.parse(response) || $.parseJSON(response); 
      alert(data); 
     } 
     }); 
     } else { 
      alert("Please Enter Password Correctly"); 
     } 
     }); 
}); 
<script> 

私は混乱しています。私を案内してください。ありがとうございました。

+0

あなたが表示する '$ ReturnMessage'の例の値はオブジェクト/配列ではない文字列であるようですが、なぜ' json_encode'を呼び出すのですか? JS内で 'var data = ...'行と 'alert(response)'だけを削除するとどうなりますか? – nnnnnn

+0

あなたは文字列を返しています – guradio

+0

私はそれらを置き換えました。何が起こったのか私のフォームの一部のhtmlと 'xdebug-error'のいくつかのhtmlに' undefined index'のエラーを含むポップアップが出てきました。 @nnnnnn –

答えて

0

PHPでコンテンツタイプを設定しましたか? JSONは、PHPスクリプトを取得するとき

header('Content-Type: application/json'); 

また、あなたはjson_decodeを実行すると、PHPはboolean型としてそれを認識します、引用符で「真」に置く必要はありません。

+0

コンテンツタイプを追加する特定の行はありますか?私は引用符を削除し、これを 'data:{Submit:true}、' @Kondaに置き換えました。それを教えていただきありがとうございます。 –

+0

ヘッダーはPHPにあります – mplungjan

+0

'echo json_encode($ ReturnMessage);' @mplungjan –

1

まず、jQueryは自動的にJSONをデコードできます(また、推測するのに最適です)。手動で行うと、コードがより冗長でエラーが発生しやすくなります。しかし、あなたは何のヒントも与えていない。共有しているコードの中には、jQueryを使用する意図についての手がかりがありません。

あなたが年代順に、そうすることができるすべてのフェーズ:

  1. レポートデータ型Webサーバから。PHPから

    <Files "confirm3.php"> 
        ForceType application/json 
    </Files> 
    
  2. レポートデータの種類::あなたは、Apache使用することが起こる場合

    header('Content-Type: application/json'); 
    
  3. あなたが期待するようにjQueryを知らせるJSON:

    url: "confirm3.php", 
    method: "POST", 
    dataType: "json", 
    data: { Submit: "true" }, 
    success: function(response) { 
        console.log(data); // Already decoded (don't use alert to debug!) 
    } 
    

あなたは確かにすることができますほぼすべてのステップを省略して、すべてではありません。

第2に、JSON解析エラーが発生した場合は、最初に応答が有効なJSONかどうかを確認する必要があります。これを見るための最も簡単な方法は、ブラウザ開発ツール、具体的にはthe "Network" paneを使用することです。

0

私の場合、これを使っていくつかのヌルバイトがあるので、これを把握して問題を修正しました。

var data3 = data.substring(data.lastIndexOf("{")+1,data.lastIndexOf("}")); 
     count = $.parseJSON("{"+data3+"}"); 
     alert(count.firstname); // firstname is the key so you can use anything to test it. 
関連する問題