2011-09-14 37 views
6

Tôi có một thói quen jquery.ajax gọi một tập lệnh php. Tập lệnh php thực hiện tra cứu trên API tìm kiếm của Google và trả về json cho tập lệnh ajax gọi.Lỗi trả về jQuery.ajax: Mã thông báo không mong muốn với Thông báo lỗi: parseerror?

Các kịch bản hoạt động tốt trên 99% số cài đặt, tuy nhiên, trên một số ít, khi tôi gọi:

error: function(jqXHR, textStatus, errorThrown){ 
alert('HTTP Error: '+errorThrown+' | Error Message: '+textStatus); 
} 

Nó trả về:

HTTP Error: SyntaxError: Unexpected token < | Error Message: parsererror

Làm thế nào tôi có thể khắc phục sự cố này sử dụng giao diện điều khiển javascript hoặc công cụ phát triển chrome? Mã cuống dưới ...

var result=''; 
jQuery.ajax 
({ 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    url: <?php echo '"' .plugins_url('/script.php', __FILE__); ?>?Query="+ jQuery('#search_keyword').val(), 
    success: function(data) 
    {  
     //do something with results 
    }, 

    error: function(jqXHR, textStatus, errorThrown){ 
     console.log(arguments); 
     alert('HTTP Error: '+errorThrown+' | Error Message: '+textStatus); 
     return; 
    } 
}); 

UPDATE: lỗi OBJECT console.log của lần đọc:

responseText: "<br />↵<b>Warning</b>: array_map() [<a href='function.array-map'>function.array-map</a>]: Argument #2 should be an array in <b>/filepath/wp-content/plugins/test/test.php</b> on line <b>75</b><br />↵<br />↵<b>Warning</b>: Invalid argument supplied for foreach() in <b>/filepath/wp-content/plugins/test/test.php</b> on line <b>90</b><br />↵No Records Returned. Search may be down. Wait a few minutes" 
+0

Có vẻ như bạn đã trở lại với json không đúng định dạng. Các '<' sẽ gợi ý rằng có lẽ đó là một thẻ html quấn quanh json? –

+0

Ngôn ngữ nào? Đó là URL bạn bắn cho sự trở lại của json? Có lẽ bạn nhận được XML thay vào đó? Vui lòng cung cấp thêm thông tin. – hakre

+0

@hakre: cảm ơn vì đã kiểm tra điều này. Tôi vừa cập nhật câu hỏi. – RegEdit

Trả lời

11

Bạn có thể có HTML trở về nơi nó được không được phép cho JSON.

Hãy thử console.log(arguments); trước khi cảnh báo để xem những gì sẽ được trả về

+0

Cảm ơn Neal, khi tôi xem giao diện điều khiển javascript sau khi chèn nó, tôi nhận được thông báo giống như ở đó: [Object, "parseerror", SyntaxError] – RegEdit

+0

@RegEdit - xem những gì có trong 'Object' – Neal

+0

+ 1 Neal, bây giờ tôi có một số manh mối. Chỉ cần cập nhật câu hỏi với kết quả. – RegEdit

0

này cho bạn biết nơi được vấn đề là

responseText: "<br />↵<b>Warning</b>: array_map() [<a href='function.array-map'>function.array-map</a>]: Argument #2 should be an array in <b>/filepath/wp-content/plugins/test/test.php</b> on line <b>75</b><br />↵<br />↵<b>Warning</b>: Invalid argument supplied for foreach() in <b>/filepath/wp-content/plugins/test/test.php</b> on line <b>90</b><br />↵No Records Returned. Search may be down. Wait a few minutes" 

Nhiều khả năng trong một số cài đặt nó cư xử theo một cách khác vì error_reporting cài đặt khác nhau

Trong báo cáo lỗi môi trường sản xuất phải tắt, nhưng theo quy tắc chung, mã của bạn sẽ không bao giờ phát ra bất kỳ cảnh báo hoặc thông báo nào.

Trong mọi trường hợp, bạn nên xử lý các lỗi của bạn tốt hơn đặc biệt là trong

Argument #2 should be an array in /filepath/wp-content/plugins/test/test.php on line 75 
Invalid argument supplied for foreach() in /filepath/wpcontent/plugins/test/test.php on line 90 

Cả những cảnh báo này là do thực tế là biến của bạn không phải là một mảng (có thể sai hoặc null), thường này có thể được cố định với an is_array kiểm tra trước khi truy cập mảng hoặc bằng cách luôn luôn kiểm tra giá trị trả lại của tất cả các hàm.

Các vấn đề liên quan