Ecco cosa sto cercando di realizzare. Ho una forma che usa jQuery per fare una chiamata AJAX a un file PHP. Il file PHP interagisce con un database e quindi crea il contenuto della pagina da restituire come risposta AJAX; Ad esempio, il contenuto di questa pagina viene scritto in una nuova finestra nella funzione di successo per la chiamata $.ajax
. Come parte del contenuto della pagina restituito dal file PHP, ho un semplice tag script HTML che ha un file JavaScript. In particolare:Perché il mio tag <script> non funziona con il file php? (jQuery coinvolto anche qui)
<script type="text/javascript" src="pageControl.js"></script>
Ciò non si ripercuote sul php (anche se ho provato), è solo html. Il pageControl.js è nella stessa directory del mio file php che genera il contenuto.
Non importa quello che provo, non riesco a ottenere il file pageControl.js
incluso o il lavoro nella risultante nuova finestra creata in risposta al successo nella chiamata AJAX. Finisco con errori come "Oggetto atteso" o variabile non definita, che mi porta a credere che il file non venga incluso. Se copio il codice JavaScript direttamente nel file PHP, invece di usare il tag script con src, posso farlo funzionare.
C'è qualcosa che mi manca qui riguardo la risoluzione dello scope tra file di chiamata, php e jQuery AJAX? Ho intenzione di voler includere i file javascript in questo modo in futuro e vorrei capire cosa sto facendo male.
Ciao di nuovo:
ho lavorato via a questo problema, e ancora senza fortuna. Cercherò di chiarire quello che sto facendo, e forse questo mi farà venire in mente qualcosa. Sto includendo del codice come richiesto per aiutare a chiarire un po 'le cose.
Ecco la sequenza:
- L'utente seleziona alcune opzioni, e fa clic pulsante di invio sulla forma.
Il pulsante modulo click è gestita da codice jQuery che assomiglia a questo:
$(document).ready(function() { $("#runReport").click(function() { var report = $("#report").val(); var program = $("#program").val(); var session = $("#session").val(); var students = $("#students").val(); var dataString = 'report=' +report+ '&program=' +program+ '&session=' +session+ '&students=' +students; $.ajax({ type: "POST", url: "process_report_request.php", cache: false, data: dataString, success: function(pageContent) { if (pageContent) { $("#result_msg").addClass("successMsg") .text("Report created."); var windowFeatures = "width=800,menubar=yes,scrollbars=1,resizable=1,status=yes"; // open a new report window var reportWindow = window.open("", "newReportWindow", windowFeatures); // add the report data itself returned from the AJAX call reportWindow.document.write(pageContent); reportWindow.document.close(); } else { $("#result_msg").addClass("failedMsg") .text("Report creation failed."); } } }); // end ajax call // return false from click function to prevent normal submit handling return false; }); // end click call }); // end ready call
Questo codice esegue una chiamata AJAX in un file PHP (process_report_request.php
) che crea il contenuto della pagina per la nuova finestra . Questo contenuto è preso da un database e HTML. Nel file PHP voglio includere un altro file javascript in testa con javascript utilizzato nella nuova finestra. Sto cercando di comprendere come segue
<script src="/folder1/folder2/folder3/pageControl.js" type="text/javascript"></script>
nomi delle cartelle percorso cambiato per proteggere gli innocenti :)
Il file pageControl.js è in realtà nella stessa cartella del file di codice jQuery e il file php, ma sto provando il percorso completo solo per essere al sicuro. Sono anche in grado di accedere al file js utilizzando l'URL nel browser e posso inserirlo con successo in una pagina di prova html statica utilizzando il tag src dello script.
Dopo che il file javascript è incluso nel file php, ho una chiamata a una delle sue funzioni nel modo seguente (eco da php):
echo '<script type="text/javascript" language="javascript">writePageControls();</script>';
Quindi, una volta che il file php invia tutte pagina il contenuto torna alla chiamata AJAX, quindi la nuova finestra viene aperta e il contenuto restituito viene scritto dal codice jQuery sopra.
La riga writePageControls
è dove viene visualizzato l'errore "Errore: oggetto previsto" quando eseguo la pagina. Tuttavia, dal momento che JavaScript funziona bene sia nella pagina HTML statica che quando è incluso "in linea" nel file PHP, mi sta portando a pensare che questo sia un problema di percorso di qualche tipo.
Anche in questo caso, indipendentemente da ciò che provo, le mie chiamate alle funzioni nel file pageControls.js non funzionano. Se inserisco il contenuto del file pageControl.js nel file php tra tag di script e non modifica nient'altro, funziona come previsto.
Sulla base di ciò che alcuni di voi hanno già detto, mi chiedo se la risoluzione del percorso per la finestra appena aperta non sia corretta. Ma non capisco perché, perché sto usando il percorso completo. Anche per confondere le cose ancora di più, il mio foglio di stile collegato funziona bene dal file PHP.
Mi scuso per quanto tempo è, ma se qualcuno ha il tempo di guardare oltre, lo apprezzerei molto. Sono perplesso. Sono un principiante quando si tratta di molto di questo, quindi se c'è solo un modo migliore per fare questo ed evitare questo problema, io sono tutto orecchie (o gli occhi suppongo ...)
Puoi postare alcuni messaggi di errore? –
Come stai cercando di usarlo? Forse non è caricato prima di tentare di usarlo. – Greg
Sei sicuro che il percorso di "pageControl.js" si risolva correttamente all'interno della nuova finestra? – James