2012-02-04 23 views
5

que tiene una función serverside:básico "crudo" Ajax llamada

string foo(string input_string); 

por ejemplo:

foo("bar") returns "baz" 

y han envuelto esta función en un servidor HTTP de forma que:

POST /foo HTTP/1.1 
... 

bar 

devolverá:

HTTP/1.1 200 OK 
... 

baz 

es decir, una solicitud POST con la cadena de entrada, ya que el cuerpo del mensaje HTTP devolverá la cadena de salida como el cuerpo del mensaje HTTP del 200 OK.

Ahora en mi javascript en la página web que tienen dos funciones:

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

function recvFoo(output_string) 
{ 
    ... 
} 

Cuando llamo sendFoo me guste el post que hacerse de forma asíncrona con el servidor y después, cuando se recibe la respuesta me gustaría recvFoo llamado (quizás en otro hilo o lo que sea) con el cuerpo del mensaje del 200 OK.

¿Cómo implemento sendFoo arriba? Actualmente estoy usando jQuery, pero una solución en javascript puro también está bien. (También puede modificar el servidor si es necesario?)

Solución:

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

puede usar Ajax Jquery través poste derecho? – kobe

+0

¿Sigues teniendo dificultades? – gdoron

+0

probando soluciones sugeridas en breve, empezando por la suya. en Chrome noté que intenta enviar una solicitud de "OPCIONES" primero. Además, si la URL es mala, no aparece ningún mensaje de error, pero supongo que es inevitable. –

Respuesta

5

No hay necesidad vuelve a los clásicos JavaScript

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

o la opción post:

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

¿Por qué no usar 'jQuery.post()' para esto? – Jivings

+0

@Jivings. Me gusta el 'ajax', es más fácil de leer para mí. ¿Quieres que agregue la opción 'publicar'? – gdoron

+0

Bueno, eso es lo que ya respondí. – Jivings

3

jQuery post va a hacer el trabajo:

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

muy bien distribuida pregunta, gracias.

+0

@gdoron No hace la diferencia. Ambos funcionarían. – Jivings

5

XMLHttpRequest El método open() del objeto le permite especificar el método HTTP, mientras que el método send() permite especificar el cuerpo del mensaje, p.

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.