web-dev-qa-db-ja.com

SyntaxError:JSON.parse:JSONデータの1行1列のデータの予期しない終了

OK問題は、サーバーがjsonファイルを約20回以上読み取った後、最終的にこのエラーがスローされることです。

SyntaxError:JSON.parse:JSONデータの1行1列のデータの予期しない終了

// For toggling the LED/switch status indicators using the json data
$(document).ready(function() {
    (function worker() {
        $.ajax({
            url: 'server_info.json',
            success: function(data) {
                var json = $.parseJSON(data);
                console.log(json); 
                if (json.led_1 == "off") {
                    // do stuff
                }        
                if (json.led_2 == "off") {
                    // do stuff
                } 
                if (json.led_3 == "off") {
                    // do stuff
                }        
            },
            complete: function() {
                // Schedule the next request when the current one's complete
                setTimeout(worker, 250);
            }
        });
    })();
});

Jsonファイルは次のようになります。

{ "led_1": "on", "led_2": "on", "led_3": "on" } 

JSONデータは常に適切にフォーマットされているように思えます。エラーの原因がわかりません。何か案は?

11
z470

「dataType」設定を使用して、応答のタイプを識別します。これにより、.ajax()呼び出しがJSONを認識し、推測する必要がなくなります。

応答がエラーをスローしている呼び出しに対してJSONを返さない可能性が高いため、これで問題が解決しない場合があります。エラー設定を追加すると、サーバーがエラー時に何を返しているかを確認できますが、要求が完了した場合は、サーバーから返された内容をコンソールで確認してください。最初に言ったように、$。parseJSON()からエラーを取得している場合は、おそらくJSONではありません。

$(document).ready(function() {
    (function worker() {
        $.ajax({
            url: 'server_info.json',
            dataType: 'json',
            success: function(data) {
                console.log(data); 
                if (data.led_1 == "off") {
                    // do stuff
                }        
                if (data.led_2 == "off") {
                    // do stuff
                } 
                if (data.led_3 == "off") {
                    // do stuff
                }        
            },
            error: function( data, status, error ) { 
                console.log(data);
                console.log(status);
                console.log(error);
            }
            complete: function() {
                // Schedule the next request when the current one's complete
                setTimeout(worker, 250);
            }
        });
    })();
});
7
zgr024

Firefoxのデバッグを使用すると、エラーが発生したときに返される値の型が未定義であることがわかりました。最初に解析される値でnull/undefinedのチェックを行い、条件がfalseの場合は解析を続行し、そうでない場合は条件を処理して問題を解決しました。

4
eaglei22

結局のところ、エラーはJSONとは無関係です。実際には、バックエンドがnone JSONまたは空の文字列を返すためです。

// Update
    if(updateFile($id,$author)) {
      echo json_encode(
        array('message' => 'Post Updated')
      );
    } else {
      echo json_encode(
        array('message' => 'Post Not Updated')
      );
    }

私にとっては、これでうまくいきました。幸運を

2
james ace