2011-08-29 16 views
25

Sólo estoy tratando de hacer una petición simple como esto:Ajax va a [% 20Object objeto]

$('.asd').change(
     function() { 
      $.ajax({ 
       url: 'http://127.0.0.1/folder/index.php/controller/action/integer', 
       success: function(data){} 
      }); 
     } 
    ); 

Este código intenta ir a http://127.0.0.1/folder/index.php/controller/[object% 20Object] en su lugar y obtiene un 404. ¿De dónde saca el objeto? Estoy usando una cadena simple.

+0

cuál es su tipo de contenido? dónde están tus datos ¿Es esta tu solicitud completa de Ajax? pegue el código completo de '$ .ajax' – naveen

+0

Posible duplicado de [% 5Bobject% 20Object% 5D (404 no encontrado) cuando se intenta enviar por AJAX] (http://stackoverflow.com/questions/10357445/5bobject20object5d-404-not -found-when-attempting-to-submit-via-ajax) –

Respuesta

4

Tuve el mismo problema y busqué por todas partes buscando una respuesta. Lamentablemente, este colaborador nunca volvió con uno. El mío fue un error estúpido. al regresar de Ajax, utilicé inadvertidamente mi variable después de una palabra reservada. Aquí es lo que tenía:

$.post('/MyApp.php', { param: 'getLocation' }, 
    function(xml) { 
    location=$(xml).find('Location'); 
    } 
}); 

codificado como este, a su regreso del Ajax la página se redirige a la dirección http: // myurl/[Objeto% 20object], que tiene mucho sentido ahora.

Resolución: cambie la "ubicación = $ ..." por "clocation = $ ..." Afortunadamente esta respuesta ayudará a otra persona. Es difícil de depurar.

+2

No es relevante aquí: el usuario no ha definido ninguna variable. Completamente su culpa por usar variables globales. – Eric

+2

Un poco duro considerando que Dave estaba poniendo algo allí en una pregunta relativamente vieja. Mi problema fue la construcción incorrecta de la URL. Ese es también el problema del OP, probablemente a través de una redirección o inadvertidamente ha dejado algo fuera de su muestra de código. – Seth

16

Para mí, el problema era que estaba usando $.post en lugar de $.ajax.

// fails: 
$.post({ 
    url: "/example/" + this.id, 
    // ... 
}); 

// works: 
$.ajax({ 
    url: "/example/" + this.id, 
    // ... 
}); 
+2

Sí, pero si no establece el tipo de 'POST' esto es un http GET –

+4

Sólo tuve un problema donde el uso de '$ .ajax ({type: 'POST' ...}})' en realidad estaba usando GET - muy extraño. Pasé a usar '$ .post()', y cometí el mismo error de sintaxis que hice anteriormente. Por '$.post() ', el primer parámetro es la cadena URL, seguido de un objeto, que es ligeramente diferente de la sintaxis para la versión abreviada' $ .ajax() '. Aclamaciones. – gthmb

5

ajax espera un mapa de parámetros. post espera parámetros individuales:

// fails: 
$.post({ 
    url: "/example/" + this.id, 
    // ... 
}); 

// works: 
$.post("/example/" + this.id); 
1

Para mí, trabajar en juego y utilizando jsRoutes esto era muy muy doloroso para averiguar.

Parece que el juego (JavaScript) hará un Ajax conseguir sin problema utilizando la siguiente sintaxis:

$.ajax(jsRoutes.controllers.MyController.ajax(inurlparam)) 
.done(function(data) { 
    }).fail(function(data) { 
    }) 

Sin embargo (y aquí es la parte desagradable) ... Si desea hacer un post que necesita utilizar el método absolutURL() en la URL primero para obtener el ajax (o publicar) para no incluir un [object%20Object] en la url en el momento de la publicación. Ninguna cantidad de depuración de la URL o los parámetros de la forma parecían indicar lo que estaba sucediendo ni por qué. Simplemente literalmente "adiviné" esta solución por pura frustración. PD: fíjese en los corchetes al final de absolutURL() - las personas js obtendrán al instante esas palabras "do" significando que la función no solo me pasa el control.

var url = jsRoutes.controllers.MyController.ajaxPost(inurlparam).absoluteURL(); 
    var formData = $('#form').serialize(); 
    $.ajax({ 
    url: url, 
    type: "POST", 
    data: formData 
    }).done(function(data) { 
    }).fail(function(data) { 
    }) 

Estoy respondiendo esto aquí ya que es donde Google me llevó una vez que finalmente di cuenta de que podría no ser mi codificación que estaba causando el problema :)

Cuestiones relacionadas