2009-03-20 31 views
7

Tôi đang cố gắng tạo một bookmarklet, khi nhấp vào, sẽ yêu cầu một số thông tin từ người dùng (url và một vài trường khác trong trường hợp này) và sau đó gửi dữ liệu đó đến trang php trên máy chủ của tôi và sau đó hiển thị kết quả.Gọi Ajax từ Bookmarklet

Tôi muốn thực hiện cuộc gọi Ajax cho điều này để tôi không thực sự chuyển hướng đến trang mới, chỉ nhận dữ liệu nhưng tôi cho rằng tôi sẽ chạy vào giới hạn "Chính sách xuất xứ tương tự" của Ajax ... Có cách nào được biết về cơ bản làm điều tương tự?

Ngoài ra, cách tốt nhất để chuyển các tham số là gì? Tôi đã có một cơ chế tại chỗ để nhận được các thông số như một tin nhắn đăng bài từ một hình thức ... là có cách nào tôi chỉ có thể tái sử dụng này?

Trả lời

6

Bạn có thể đặt bookmarklet bằng cách tạo dấu trang và thêm đoạn mã bên dưới vào vị trí, nhưng theo same origin policy limitation, chỉ hoạt động khi tab hiện tại ở cùng một vị trí, tại đây www.google.com.

Nếu tôi hiểu rõ nhu cầu của bạn, điều đó sẽ ổn cho vấn đề của bạn.

var request = new XMLHttpRequest(); 
request.open("GET", "http://www.google.com", true); 
request.onreadystatechange = function() { 
    var done = 4, ok = 200; 
    if (request.readyState == done && request.status == ok) { 
    if (request.responseText) { 
     alert(request.responseText); 
    } 
    } 
}; 
request.send(null); 

Tôi không biết POST có hoạt động hay không.

1

Bạn sẽ không thể đăng bài, nhưng GET sẽ hoạt động tốt. Nếu bạn đang sử dụng một cái gì đó như jQuery, nó sẽ chỉ đơn giản là tạo ra một thẻ script với một URL src mà sẽ gửi dữ liệu bạn đang tìm kiếm để gửi.

Bạn sẽ phải trả lại dữ liệu kiểu JSON.

Xem: http://docs.jquery.com/Ajax/jQuery.getJSON

Ngoài ra, bookmarklet bạn có thể tạo ra một khung nội tuyến trên trang web, và điều đó có thể làm bạn làm việc nộp dữ liệu (bạn có thể sử dụng bài sau đó) nếu bạn đã không tìm cách để giao tiếp giữa các iframe và chính trang đó, nhưng thay vào đó chỉ sử dụng đầu vào của người dùng để gửi.