2011-08-29 12 views
25

Sto solo cercando di fare una semplice richiesta come questa:Ajax andando a [oggetto% 20Object]

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

Questo codice cerca di andare a http://127.0.0.1/folder/index.php/controller/[object% 20Object] invece e ottiene un 404. Da dove viene estratto l'oggetto? Sto usando una semplice stringa.

+0

che cosa è il vostro tipo di contenuto? dove sono i tuoi dati. è questa la tua richiesta completa di ajax? incolla il codice completo di '$ .ajax' – naveen

+0

Possibile duplicato di [% 5Bobject% 20Object% 5D (404 non trovato) quando si tenta di inviare tramite AJAX] (http://stackoverflow.com/questions/10357445/5bobject20object5d-404-non -incerto-quando-tentare-di-inviare-via-ajax) –

risposta

4

Ho avuto lo stesso problema e ho scavato dappertutto cercando una risposta. Sfortunatamente, questo contributore non è mai tornato con uno. Il mio era un errore stupido. al ritorno da Ajax, ho usato inavvertitamente il nome della mia variabile dopo una parola riservata. Qui è quello che avevo:

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

codificati in questo modo, al ritorno dal Ajax la pagina viene reindirizzato a http: // myurl/[% 20object oggetto], che ha perfettamente senso ora.

Risoluzione: cambiare "posizione = $ ..." in "clocamento = $ ..." Speriamo che questa risposta aiuti qualcun altro. È difficile da eseguire il debug.

+2

Non rilevante qui: l'utente non ha definito alcuna variabile. Interamente colpa tua per l'utilizzo di variabili globali. – Eric

+2

Un po 'duro considerando che Dave stava semplicemente mettendo qualcosa là fuori su una questione relativamente vecchia. Il mio problema era la costruzione non corretta dell'URL. Questo è anche il problema dell'OP, probabilmente attraverso un reindirizzamento o ha inavvertitamente lasciato qualcosa fuori dal suo esempio di codice. – Seth

16

Per me il problema era che stavo usando $.post invece di $.ajax.

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

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

Sì, ma se non si imposta il tipo su "POST" questo è un http GET –

+4

Ho appena avuto un problema con l'uso di '$ .ajax ({type: 'POST' ...}})' stava effettivamente usando GET - molto strano. Mi sono trasferito a usare '$ .post()', e ho fatto lo stesso errore di sintassi che hai fatto sopra. Per '$.post() ', il primo parametro è la stringa URL, seguita da un oggetto - che è leggermente diverso dalla sintassi per la versione abbreviata' $ .ajax() '. Saluti. – gthmb

5

ajax prevede una mappa dei parametri. post aspetta singoli parametri:

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

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

Per me, che lavorano in Play e utilizzando jsRoutes questo è stato molto molto doloroso per capire.

Sembra che Play (Javascript) farà un Ajax ottenere senza problema utilizzando la seguente sintassi:

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

Tuttavia (e qui è la parte brutta) ... Se si desidera fare un post è necessario utilizzare il metodo absolutURL() sull'URL per ottenere prima l'ajax (o il post) per non includere un [object%20Object] nell'URL al momento della pubblicazione. Nessuna quantità di debug dell'URL o dei parametri del modulo sembrava indicare ciò che stava accadendo, né perché. Ho letteralmente "indovinato" questa soluzione per pura frustrazione. PS: nota le parentesi alla fine di absolutURL() - js persone otterranno istantaneamente quelle che significano "fare" la funzione non solo passarmi il manico.

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) { 
    }) 

sto rispondere a questa qui come questo è dove Google mi ha portato una volta ho finalmente capito che potrebbe non essere il mio codice che è stato la causa del problema :)

Problemi correlati