5

Chúng tôi có một thanh tìm kiếm tùy chỉnh trên trang web của chúng tôi và tôi nhận thấy rằng đôi khi (9/10 lần) các JS sẽ ném lỗi này, trong đó lực lượng nội dung mà bạn tìm kiếm không làmGoogle WebSearch tìm kiếm tùy chỉnh API ném TypeErrors

www.googleapis.com/customsearch/v1element?key=AIzaSyCVAXiUzRYsML1Pv6RwSG1gu…oogle.com&callback=google.search.Search.apiary####&nocache=1446053383742:2

Uncaught TypeError: google.search.Search.apiary#### is not a function

trang tìm kiếm khi lỗi được ném: Search page when error is thrown

trang tìm kiếm với lỗi cắt ngắn/giải quyết Search page when error is truncated or resolved

Nhưng nếu tôi làm mới hoặc nghiên cứu, lỗi này sẽ bị xóa và sẽ hiển thị tất cả tìm kiếm của tôi. Sau khi xem qua các tập tin, tôi phát hiện ra các google.search.Search.apiary#### mà họ đang đề cập đến chỉ được đề cập một lần. Vì vậy, tôi tin rằng lỗi này là cắt ngắn toàn bộ tập tin khi nó hiển thị. Điều gì có thể gây ra điều này, điều gì sẽ là một số tùy chọn để sửa chữa nó?

+0

Cảm ơn rất nhiều vì giải pháp được đề xuất.Trên thực tế, chúng tôi đang sử dụng một hộp TEXT HTML đơn giản trên tất cả các trang của chúng tôi và sau đó chuyển hướng truy vấn tìm kiếm đến trang chỉ tìm kiếm cụ thể. Trên trang tìm kiếm này, chúng tôi có hộp tìm kiếm của Google (được tạo bởi tập lệnh) và kết quả tìm kiếm. Tôi tin rằng, kịch bản được chạy hai lần cũng gây ra vấn đề cho chúng tôi. Tôi đã loại bỏ một trong số họ và nó dường như làm việc tại thời điểm này. Cảm ơn rất nhiều vì đã ghi lại nó. –

Trả lời

10

Alright, tôi stumbled khi một câu trả lời: -

Sau khi thực hiện một số nghiên cứu nhiều hơn, tôi phát hiện ra rằng this user on Google Forums cũng có cùng một vấn đề.

Để đơn giản, cách hoạt động là bạn sử dụng <script> để tạo thanh tìm kiếm của mình.

Bạn có chức năng này + yếu tố html cho thanh tìm kiếm của bạn

<script> 
(function() { 
    var cx = '###'; 
    var gcse = document.createElement('script'); 
    gcse.type = 'text/javascript'; 
    gcse.async = true; 
    gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + 
     '//cse.google.com/cse.js?cx=' + cx; 
    var s = document.getElementsByTagName('script')[0]; 
    s.parentNode.insertBefore(gcse, s); 
})(); 
</script> 

<gcse:searchbox-only resultsUrl="/search-results"></gcse:searchbox-only> 

Vì vậy, chúng tôi tạo ra các quán bar ở <div class="header"> của chúng tôi đó là một yếu tố HAML, như một phần của một bản mẫu. Vì vậy, nó luôn được tải trong mỗi tiêu đề. Vì chúng tôi có 10 trang, tập lệnh này được tạo 1 lần trên mỗi trang.

Google CSE của chúng tôi được thực hiện để tìm kiếm và sau đó chuyển hướng đến url /search-results nơi tạo kết quả.

Để tạo ra các kết quả, bạn cần chức năng này và HTML

<script> 
    (function() { 
     var cx = '###'; 
     var gcse = document.createElement('script'); 
     gcse.type = 'text/javascript'; 
     gcse.async = true; 
     gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + 
      '//cse.google.com/cse.js?cx=' + cx; 
     var s = document.getElementsByTagName('script')[0]; 
     s.parentNode.insertBefore(gcse, s); 
    })(); 
    </script> 

Mà là giống như một trong những được nạp trong header của chúng tôi. Khi thiết lập này, trang kết quả sẽ gọi là <script> hai lần khi tải trong và làm cho số JS bị ngắt. Vì vậy, sau khi xóa <script> tải kết quả, nó ngừng ném lỗi.

Để tóm tắt, chỉ cần đảm bảo bạn không gọi cùng một số function hai lần trên trang kết quả của bạn và nó sẽ xóa Uncaught TypeError.

Không. Nói lại. Mình

--ether

1

Trong trường hợp của tôi, tôi vô tình đã the form and script cho Google Custom Search lặp lại hai lần trên cùng một trang. Một khi lô thứ hai đã được gỡ bỏ, nó đã ngừng đưa ra lỗi.

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