2012-04-27 10 views
16

Sto provando a passare variabili tramite ajax a uno script PHP che eseguirà una query MySQL. Tuttavia, continuo a ricevere l'errore 404 Not Found con: "http: // myurl/database /% 5Bobject% 20Object% 5D".% 5Bobject% 20Object% 5D (404 non trovato) durante il tentativo di invio tramite AJAX

Sembra che stia cercando di inviare i dati a http://myurl/database/%5Bobject%20Object%5D invece dello script PHP che ho definito. Davvero in perdita su questo ... pensavo che mettere l'URL assoluto in avrebbe funzionato.

Di seguito è riportato il mio codice. Sarebbe eternamente grato per tutto l'aiuto ....

<script type="text/javascript"> 
function insertData() 
{ 
    var dataid= $('#dataid').attr('value'); 
    var industry = $('#industry').attr('value'); 
    var geolocation = $('#geolocation').attr('value'); 
    $.post({ 
     type: "POST", 
     url: "http://myURL/database/InsertData.php", 
     data: "dataid="+ dataid+"&amp;industry="+ industry +"&amp;geolocation="+ geolocation, 
     }); 
return false; 
}; 

</script> 
+0

Usa '.val()' invece di '.attr ('valore')'. –

+1

@RobW - è irrilevante –

risposta

1

provare l'invio dei dati in un oggetto, invece, come:

data: { 
    dataid : dataid, 
    industry : industry, 
    geolocation : geolocation 
} 
+0

Se il problema riguardava il parametro data, l'URL non si corrompe. – Tgr

+0

una stringa malformata può danneggiare l'URL no? – Evan

+0

No. In primo luogo, questa è una richiesta POST, quindi i dati non si avvicinano all'URL; e anche se lo fosse, si otterrebbe qualcosa come 'http: //myURL/database/InsertData.php? ', la fine dell'URL non scomparirebbe magicamente. – Tgr

9

Si dovrebbe cambiare il $.post-$.ajax o passare l'URL e dati parametri. $.post è solo una scorciatoia per $.ajax e accetta l'URL come primo parametro.

quindi dovrebbe essere:

$.ajax({ 
    type: "POST", 
    url: "http://myURL/database/InsertData.php", 
    data: "dataid="+ dataid+"&amp;industry="+ industry +"&amp;geolocation="+ geolocation 
}); 

o, con $ .post

$.post("http://myURL/database/InsertData.php", "dataid="+ dataid+"&amp;industry="+ industry +"&amp;geolocation="+ geolocation); 

ricordare che i documenti sono quasi sempre utili

+0

Grazie mille per il tuo aiuto. Non ricevo più l'errore 404. Un'altra domanda se hai tempo: sto cercando di passare le variabili PHP alla funzione JavaScript di sopra in questo modo: var data = $ ("# Dataid, # Industria, # Geolocalizzazione '). Serialize(); $ .post ('/database/InsertData.php ', dati); ma non sembra funzionare ... Come faccio a passare una variabile PHP a una funzione javascript quando usa AJAX? –

1

Evan è giusto, inviando tryy tua un dato un oggetto, jquery si occuperà correttamente della codifica URL dei valori. Le concatenazioni di stringhe possono essere problematiche in js.

18

Come detto e, $.post prevede una stringa URL come primo parametro; se si desidera passare un oggetto opzione, è necessario utilizzare $.ajax.

Quando si tenta di chiamare $.post(<option object>), l'oggetto opzione viene utilizzato come URL; in questo processo, viene eseguito il cast su una stringa (e un cast di oggetto su una stringa diventa [object <type>] in Javascript; in questo caso, [object Object]), viene codificato tramite URL (%5Bobject%20Object%5D) e, poiché non inizia con / o un nome di protocollo, viene interpretato come un URL relativo e ottiene il prefisso con il protocollo, il dominio e il percorso correnti. Quindi, poiché non ci sono più parametri, una richiesta POST AJAX vuota viene inviata a quell'URL.

Un altro problema è che si utilizza &amp; per separare i parametri; che dovrebbe essere fatto solo in HTML, qui dovresti semplicemente usare &. (O un oggetto dati, come diceva Evan, in questo modo non è necessario pensare ai problemi di codifica.) E .val() e .attr('value') non sono la stessa cosa; il primo è il valore corrente del campo, il secondo è il valore che aveva quando veniva caricata la pagina.

Il modo più semplice per questo in modo corretto è questo:

function insertData() { 
    var data = $('#dataid,#industry,#geolocation').serialize(); 
    $.post('http://myURL/database/InsertData.php', data); 
    return false; 
} 

Questo presuppone che i tre campi hanno lo stesso name e id come $.serialize usa name per il nome del parametro.

+1

Va bene, ma doveva funzionare come da documentazione: 'jQuery.post ([settings])' * Un set di coppie chiave/valore che configurano la richiesta Ajax Tutte le proprietà ad eccezione di * 'url' * sono facoltative *. (http://api.jquery.com/jquery.post/) –

+1

" versione aggiunta: 3.0 " – Tgr

1

Sembra un errore jquery. jQuery.post è una stenografia di jQuery.ajax({method:"post"});, quindi ho cambiato il mio codice a questo e ha funzionato per me. Spero che correggeranno questo problema.

Nota: il problema esiste ancora nelle versioni 1.10.2 e 2.0.2.

+0

ha trovato la stessa cosa , questo lo ha risolto. – Tofuwarrior

Problemi correlati