2010-01-13 22 views
63

estoy tratando de usar la función de POSTE de jquery pero está manejando la solicitud en estilo AJAX. Quiero decir que en realidad no va a la página que le digo que vaya.no-AJAX solicitud de POSTE de jquery

$("#see_comments").click(function() { 
      $.post(
      "comments.php", 
      {aid: imgnum}, 
      function(data){ 

      }); 
     }); 

esta función debe ir a la página comments.php con el valor de ayuda en la mano. está publicando bien, pero no está redireccionando a comments.php.

@Doug Neiner aclaración:
1. Tengo 15 enlaces (imágenes). hago clic en un enlace y carga mi javascript. el JS sabe wat imgnum que abrí. este imgnum quiero en los comments.php. tengo que usar este javascript y ningún otro medio puede hacer el truco. el JS es obligatorio. 2. su método envía con éxito el valor de la ayuda. pero en los comentarios.php cuando trato de hacer eco de ese valor, no muestra nada. 3. Estoy usando Firebug. en la consola, muestra el echo PETICIÓN que hice en el paso (2) con éxito.

+2

¿Uh? Redirigir? Tal vez puedas explicar un poco más lo que estás tratando de hacer. – metrobalderas

+0

¿Está el comments.php en la misma carpeta que el archivo solicitante? – rahul

+0

@metrobalderas: creo que está bastante claro. @pulse: sí lo es. – amit

Respuesta

118

Sé lo que estás tratando de hacer, pero no es lo que quieres.

En primer lugar, a menos que sea cambiando datos en el servidor, no utilice una solicitud POST. Acaban de ser un #see_comments normales <a href='/comments.php?aid=1'>...

Si usted tiene POST utilizar, a continuación, hacer esto para obtener la página para seguir su llamada:

$("#see_comments").click(function() { 
    $('<form action="comments.php" method="POST">' + 
    '<input type="hidden" name="aid" value="' + imgnum + '">' + 
    '</form>').submit(); 
}); 

cómo esto realmente funciona.

Primera $.post es solamente un método AJAX y no se puede utilizar para hacer un tradicional form enviar al igual que usted está describiendo. Entonces, para poder publicar un valor y navegue a la nueva página, necesitamos simular una publicación form.

De modo que el flujo es el siguiente:

  1. Hace clic en la imagen, y su código JS obtiene el imgnum
  2. A continuación, alguien hace clic en #see_comments
  3. Creamos un temporal form con el imgnum valor en él como un campo oculto
  4. Enviamos ese formulario, que publica el valor y carga el comments.php página
  5. Su página comments.php tendrá acceso a la variable publicada (es decir en PHP sería $_POST['aid'])
+0

el valor de la ayuda proviene de la base de datos. así que realmente me gustaría que la cosa jquery funcione. como necesito mi Javascript también – amit

+0

@amit, en el código que publica, el valor 'aid' no proviene de la base de datos que se * envía * a la solicitud AJAX. ¿No has publicado toda tu función? –

+0

el valor de imgnum es de db. – amit

1

En realidad, $.post() envía algunos datos al servidor. No causa ninguna redirección a menos que lo haga en el código del lado del servidor que maneja la solicitud POST. Puedo sugerir dos soluciones:

  1. Para ir a la página comentar, en lugar de utilizar jQuery posterior, puede simplemente usar una etiqueta de 'ancla' - <a href="comments.php?aid=1">Show Comments</a>.
  2. O si quiere pasar por jQuery, puede utilizar este fragmento de código: $(location).attr("href", "comments.php?aid=1");
3

Creo que lo que está pidiendo es llegar a 'comments.php' y la publicación de aid con valor imgnum. La única forma de hacerlo es enviar este valor con un formulario.

Sin embargo, puede ocultar este formulario y enviarlo en un clic arbitrario en algún lugar con jquery.

html necesario (poner en cualquier lugar de la página):

<form id='see_comments_form' action='comments.php' action='POST'> 
    <input id='see_comments_aid' type='hidden' name='aid' value=''> 
</form> 

js necesario:

$("#see_comments").click(function(){ 
    $('#see_comments_aid').val(imgnum); 
    $('#see_comments_form').submit(); 
); 

este redirigirá a 'comments.php' y enviar el valor adecuado imgnum (que yo supongo que están llegando de otro lado).

0

no resolvió exactamente el problema. pero se las arregló para evitarlo. que tenía que hacer una modificación mucho a la JS para hacer este trabajo, pero el problema central de esta cuestión se solucionó al hacer esto:

$("#see_comments").attr({href: "comments.php?aid='"+imgnum+"'"}); 

esto añade el valor de ayuda a la dirección URL como @Doug Neiner inicialmente me sugirió que hacer. Muchas gracias Doug por todo el esfuerzo. Realmente lo aprecio. +1 y acepte su respuesta por el esfuerzo.

34
$("#see_comments").click(function() { 
    $('<form action="comments.php" method="POST"/>') 
     .append($('<input type="hidden" name="aid" value="' + imgnum + '">')) 
     .appendTo($(document.body)) //it has to be added somewhere into the <body> 
     .submit(); 
}); 
+3

Esto debe combinarse en la respuesta aceptada. Sin el formulario en el DOM no se enviará en Firefox y potencialmente otros navegadores. – JadedCore

9

Si bien la solución de Doug Neiner no solo es correcta sino también la más exhaustivamente explicada, tiene un gran problema: parece que solo funciona en Chrome.

Me moví nerviosamente por un rato tratando de determinar una solución, y luego tropecé con la segunda respuesta de nopnop77. La única diferencia es el código adicional appendTo($(document.body)). Luego lo probé en firefox y funcionó a las mil maravillas. Aparentemente, Firefox e IE necesitan tener el formulario temporal adjunto en algún lugar del cuerpo DOM.

que tenía que hacer esta implementación para un proyecto Symfony2, ya que el generador de trayectorias dentro de las plantillas de .twig sólo funciona con GET parámetros y jugar con la cadena de consulta era romper estragos en la seguridad de la aplicación. (Por cierto, si alguien conoce una forma de obtener plantillas .twig para llamar a páginas con parámetros POST, házmelo saber en los comentarios).

+1

esto debe ser un comentario, no una respuesta, solo da más información y aclaración, no es una respuesta nueva. –

Cuestiones relacionadas