2012-02-04 22 views
5

Tôi có một chức năng serverside:cơ bản "thô" Ajax Gọi

string foo(string input_string); 

ví dụ:

foo("bar") returns "baz" 

và đã quấn chức năng này vào một máy chủ HTTP như vậy:

POST /foo HTTP/1.1 
... 

bar 

sẽ trả lại:

HTTP/1.1 200 OK 
... 

baz 

tức là yêu cầu POST với chuỗi đầu vào khi Nội dung thư HTTP sẽ trả về chuỗi đầu ra làm Nội dung thư HTTP của 200 OK.

Bây giờ trong javascript của tôi trên trang web Tôi có hai chức năng:

function sendFoo(input_string) 
{ 
    ??? // should asynchronously start process to POST input_string to server 
} 

function recvFoo(output_string) 
{ 
    ... 
} 

Khi tôi gọi sendFoo Tôi muốn POST phải được thực hiện không đồng bộ với máy chủ và sau khi nhận được phản hồi Tôi muốn recvFoo được gọi (có lẽ trong một chủ đề khác hoặc bất kỳ điều gì) với Nội dung thư của 200 OK.

Tôi làm cách nào để triển khai sendFoo ở trên? Tôi hiện đang sử dụng jQuery, nhưng một giải pháp trong javascript tinh khiết là ok quá. (Tôi cũng có thể sửa đổi các máy chủ nếu cần thiết?)

Giải pháp:

function sendFoo(input_string) 
{ 
    $.ajax({ url: "/foo", type: "POST", data: input_string, success: recvFoo }); 
} 
+0

bạn có thể sử dụng jquery ajax qua đường bưu điện phải không? – kobe

+0

Bạn vẫn gặp khó khăn? – gdoron

+0

thử các giải pháp được đề xuất ngay, bắt đầu với giải pháp của bạn. trong chrome tôi nhận thấy rằng nó trys để gửi một "OPTIONS" yêu cầu đầu tiên. Ngoài ra nếu URL là xấu tôi không nhận được thông báo lỗi, nhưng tôi đoán đó là không thể tránh khỏi. –

Trả lời

5

Không cần phải dự phòng cổ điển JavaScript

$.ajax({ 
     url:"URL of foo...", 
     type: "POST", 
     data: "what ever", 
     success: recvFoo 
     }); 

Hoặc post tùy chọn:

$.post('The url of foo', {input_string : 'bar'}, recvFoo); 
+0

Tại sao không chỉ sử dụng 'jQuery.post()' cho điều này? – Jivings

+0

@Jivings. Tôi thích 'ajax', nó dễ đọc hơn đối với tôi. bạn có muốn tôi thêm tùy chọn 'post' không? – gdoron

+0

Đó là những gì tôi đã trả lời. – Jivings

3

jQuery bài sẽ thực hiện công việc:

$.post('foo.html', {'varname' : 'bar'}, function(data) { 
    recvFoo(data); 
}); 

Rất cũng đặt ra câu hỏi, cảm ơn.

+0

@gdoron Làm cho không có sự khác biệt. Cả hai sẽ làm việc. – Jivings

5

XMLHttpRequest Phương thức open() của đối tượng cho phép bạn chỉ định phương thức HTTP trong khi phương pháp send() cho phép chỉ định nội dung thư, ví dụ:

var xhr = ... // obtain XMLHttpRequest object 
xhr.open('POST', '/foo'); // HTTP method and requested URL. 
xhr.onreadystatechange = function() { 
    if (xhr.readyState == 4 && xhr.status == 200) { 
     recvFoo(xhr.responseText); // Will pass 'baz' to recvFoo(). 
    } 
}; 
xhr.send('bar'); // Message body with your function's argument.