2015-01-06 12 views
6

Được rồi vì vậy tôi đang cố gắng lấy dữ liệu từ tệp json chứa trạng thái của một vài đèn LED, v.v. Tôi có một tập lệnh chạy một vài lần một giây và kéo dữ liệu và trang web tải nó. Vấn đề là, sau khoảng 20 lần máy chủ đọc tệp json, cuối cùng nó sẽ ném lỗi này.Cú phápError: JSON.parse: kết thúc dữ liệu bất ngờ tại dòng 1 cột 1 của dữ liệu JSON

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

Các tệp json trông như thế này:

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

Dường như với tôi rằng các dữ liệu json luôn định dạng đúng. Tôi không hiểu được lỗi xuất phát từ đâu. Ý tưởng nào?

+0

Hoặc ném một breakpoint ở phần đầu của hàm, hoặc xem lưu lượng mạng trong tab mạng của bạn, và xem những gì dữ liệu trông giống như trước một lỗi. Nếu nó chỉ xảy ra 1 lần trong 20, mã của bạn có lẽ là tốt, và dữ liệu không được đến đúng. –

+1

Bạn có nhìn vào dữ liệu nào trước lỗi không? 'console.log (dữ liệu);' Bạn có chắc máy chủ không trả về cái gì khác? – epascarello

+0

Đôi khi tôi nhận được tệp tmp phiên làm rõ thông báo không thành công sau một vài yêu cầu. Có lẽ một cái gì đó là screwing lên phản ứng. – Mouser

Trả lời

3

Sử dụng cài đặt "dataType" để xác định loại phản hồi để cuộc gọi .ajax() biết JSON của nó và không cần đoán.

Điều này có thể không giải quyết được vấn đề vì có khả năng phản hồi của bạn không trả lại JSON cho cuộc gọi đang ném lỗi. Nếu bạn thêm cài đặt lỗi, bạn có thể xem máy chủ đang trả về lỗi gì nhưng nếu các yêu cầu hoàn tất, hãy kiểm tra bảng điều khiển để biết những gì đang quay trở lại từ máy chủ. Như tôi đã nói, khả năng của nó không phải là JSON nếu bạn nhận được lỗi đó từ $ .parseJSON() để bắt đầu.

$(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

Tôi nhận được lỗi này khi thủ tục php của tôi đã gửi một chuỗi rỗng, console.log (đầu ra) cho thấy chuỗi rỗng; lỗi là phương pháp php của tôi thậm chí không được gọi và tôi vẫn nhận được một chuỗi rỗng. –

+0

lỗi chính xác mà bạn nhận được là gì? – zgr024

0

Sử dụng trình gỡ lỗi Firefox, tôi có thể thấy rằng loại giá trị quay lại không xác định được khi tôi gặp lỗi đó. Thực hiện kiểm tra một null/undefined trên giá trị được phân tích cú pháp đầu tiên, sau đó nếu điều kiện là sai, hãy tiến hành phân tích cú pháp, điều kiện xử lý khác đã giải quyết được sự cố của tôi.

0

Sau một thời gian dài tìm kiếm giải pháp cho vấn đề này và không tìm cách sửa lỗi, tôi đã cố sửa đổi tệp mysql (my.ini) theo cách sau. Và nó hoạt động!

Điều duy nhất mà tôi đã làm là để bỏ ghi chú đoạn này:

## 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" 
Các vấn đề liên quan