2015-01-06 4 views
6

좋아요. 그래서 몇 개의 LED 등의 상태를 보유하고있는 json 파일에서 데이터를 가져 오려고합니다. 스크립트가 있습니다. 초당 몇 번 실행되고 데이터를 가져오고 웹 페이지가 데이터를로드합니다. 문제는 약 20 번 이상 서버가 json 파일을 읽은 후에 결국이 오류가 발생합니다.SyntaxError : JSON.parse : JSON 데이터의 1 행 1 열의 데이터가 예기치 않게 끝납니다.

SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data

// 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 데이터가 항상 올바른 형식의 것을 날 것으로 보인다. 오류가 어디서 왔는지 이해하지 못합니다. 어떤 아이디어?

+0

어느 함수의 시작 부분에 중단 점을 던져, 또는 네트워크 탭에서 네트워크 트래픽을보고, 어떤 데이터를 볼 : 나는 짓을했는지

있는 유일한 방법은이 단락 주석을 제거하는 것입니다 오류 이전처럼 보입니다. 20 번에 1 번만 발생하면 코드가 정상적으로 작동하고 데이터가 올바르게 들어오지 않아야합니다. –

+1

오류 전의 데이터는 무엇입니까? 'console.log (data);'서버가 다른 것을 반환하지 않는 것이 확실합니까? – epascarello

+0

몇 가지 요청을 한 후 때때로 tmp 파일을 통해 세션을 가져 오지 못했습니다. 어쩌면 뭔가가 응답을 망칠 수 있습니다. – Mouser

답변

3

"dataType"설정을 사용하여 .ajax() 호출이 JSON을 알고 추측 할 필요가 없도록 응답 유형을 식별합니다.

오류가 발생하는 호출에 대한 응답이 JSON을 반환하지 않기 때문에 문제가 해결되지 않을 수 있습니다. 오류 설정을 추가하면 오류시 서버가 리턴하는 것을 볼 수 있지만 요청이 완료되면 콘솔에서 서버에서 돌아오고 있는지 점검하십시오. 내가 말했듯이 JSON이 아닌 경우 $ .parseJSON()을 사용하여 오류가 발생합니다.

$(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); 
      } 
     }); 
    })(); 
}); 
+0

PHP 프로 시저가 빈 문자열을 보내면 console.log (출력)에 빈 문자열이 표시됩니다. 오류가 내 PHP 메서드라고 심지어 호출되지 않았습니다 여전히 빈 문자열 있어요. –

+0

정확한 오류는 무엇입니까? – zgr024

0

Firefox 디버깅을 사용하면 오류가 발생했을 때 값 유형이 되돌아 왔음을 알 수있었습니다. 먼저 구문 분석 할 값에 대해 null/undefined가 있는지 확인한 다음 조건이 false이면 구문 분석을 진행하고 그렇지 않으면 조건을 처리하여 문제를 해결합니다.

0

이 문제에 대한 해결책을 찾고 해결 방법을 찾지 못한 채로 다음과 같은 방법으로 내 mysql 설치 파일 (my.ini)을 직접 수정하려고 시도했습니다. 그리고 그것은 작동합니다!

## UTF 8 Settings 
init-connect=\'SET NAMES utf8\' 
collation_server=utf8_unicode_ci 
character_set_server=utf8 
skip-character-set-client-handshake 
character_sets-dir="C:/xampp/mysql/share/charsets" 
관련 문제