2012-05-02 36 views
9

Tôi đang gặp sự cố với chức năng gọi lại đơn giản trong jQuery ajax. Google sẽ không giúp đỡ và ngăn xếp tràn sẽ không hoặc là, vì vậy tôi đoán điều này có thể không phải là một cái gì đó cụ thể nhưng thay vì một cái gì đó tôi quá ngu dốt để xem. Đối với tôi mã trông giống như nó nên.Tại sao chức năng gọi lại jquery ajax không hoạt động?

Vì vậy, đây là các mã:

function sendMessage(message) 
{ 
//Establish connection to php script 
$.ajax({ 
    type: 'POST', 
    url: 'action/chat/test.php', 
    success: function(feedback){ 

     alert(feedback); 

    } 
}).error(function(){ 
    //Do some error handling here 
}); 
} 

Trong test.php nó chỉ đơn giản nói

<?php 
    echo "called"; 
?> 

Theo như tôi đang quan tâm "gọi là" nên được cảnh báo - nhưng nó không phải là. Tôi đã kiểm tra rồi hàm sendMessage() được gọi (và thông báo tham số không quan trọng bây giờ).

Có ai có ý tưởng nào không?

+0

bạn có bất kỳ lỗi tập lệnh nào không? kiểm tra giao diện điều khiển firebug. – Shyju

+0

Nếu bạn đặt cảnh báo ở đầu 'sendMessage()', nó có hiển thị không? – jfriend00

+0

Hai tùy chọn nhỏ nhất: các lỗi Javascript gây ra yêu cầu AJAX không được gửi đi, hoặc một vấn đề với yêu cầu AJAX có nghĩa là 'error', thay vì' success', hàm gọi lại được thực thi. Sử dụng trình gỡ lỗi trình duyệt của bạn sẽ là một bước đầu tiên tốt. –

Trả lời

14

Cập nhật: Một điều cần lưu ý, đảm bảo bạn sử dụng một số loại trình gỡ lỗi như firebug. Sau đó, bạn có thể chuyển đến tab mạng và xem url yêu cầu và phản hồi theo cách thủ công để xem liệu url đó có nhận được phản hồi 200 hoặc lỗi máy chủ nội bộ hay không, v.v.

Thử thêm console.log(data); vào chức năng thành công của bạn trả lại.

Bạn cũng có thể sử dụng .always(data):

function sendMessage(message) 
{ 
    //Establish connection to php script 
    $.ajax({ 
     type: 'POST', 
     url: 'action/chat/test.php' 
    }).done(function(data) { console.log(data); }) 
    .fail(function() { alert("error"); }) 
    .always(function() { alert("complete"); }); 
} 

Từ các tài liệu:

Thông báo không chấp nhận: Các jqXHR.success(), jqXHR.error(), và jqXHR.complete() callbacks sẽ không được dùng nữa trong jQuery 1.8. Để chuẩn bị mã của bạn để loại bỏ cuối cùng, hãy sử dụng jqXHR.done(), jqXHR.fail() và jqXHR.always() để thay thế.

+2

Tôi đã tìm thấy vấn đề! Đã xảy ra sự cố với quyền truy cập tệp từ apache của tôi. Apache không được phép đọc tập tin - mặc dù tôi đã tạo nó với Coda như tôi thường làm. Hiện tại, các cuộc gọi lại hoạt động. Tôi vừa tham gia tràn ngăn xếp và phải nói rằng tôi bị choáng ngợp với tất cả các câu trả lời nhanh! Cảm ơn bạn! – weltschmerz

+0

Một điều cần lưu ý, hãy đảm bảo bạn sử dụng một số loại trình gỡ lỗi như firebug. Sau đó, bạn có thể chuyển đến tab mạng và xem url yêu cầu và phản hồi theo cách thủ công để xem liệu nó có nhận được phản hồi 200 hoặc lỗi máy chủ nội bộ, v.v. – Fostah

+0

cảm ơn bạn! những gì tôi cần. – weltschmerz

1

Đây có thể là lỗi xử lý. Nếu bạn muốn xử lý lỗi, có một thuộc tính khác mà bạn có thể cung cấp cho đối tượng mà bạn truyền vào ajax, đó là "lỗi" và cũng "hết thời gian chờ" để xử lý hết thời gian chờ của trang. Tra cứu hàm $ .ajax và bạn sẽ tìm thấy các thuộc tính này.

+0

Khi tôi cố gắng sử dụng xử lý lỗi trước đó với một cảnh báo, nó không cảnh báo bất cứ điều gì. Bây giờ nó. Có vẻ như đã xảy ra sự cố với tệp php, mặc dù đường dẫn là chính xác. – weltschmerz

+1

Tôi đã tìm thấy sự cố! Đã xảy ra sự cố với quyền truy cập tệp từ apache của tôi. Apache không được phép đọc tập tin - mặc dù tôi đã tạo nó với Coda như tôi thường làm. Hiện tại, các cuộc gọi lại hoạt động. Tôi vừa tham gia tràn ngăn xếp và phải nói rằng tôi bị choáng ngợp với tất cả các câu trả lời nhanh! Cảm ơn bạn! – weltschmerz

4

Chỉ để tham khảo, có một hành vi có thể kết thúc như thế này (tức là thực hiện() không được gọi).

Ở đây là:

  1. Giả sử bạn mong đợi một đối tượng JSON (bạn yêu cầu nó với "Chấp nhận" loại mime).
  2. Giả sử chuỗi Json không hợp lệ.

Trong trường hợp này được thực hiện() không bao giờ được gọi, nhưng luôn luôn() sẽ là. Và luôn luôn() bạn sẽ nhận được câu trả lời được định dạng "xấu" dưới dạng văn bản thuần túy.

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