2010-02-22 8 views
0

J'ai un petit problème ici !! Après avoir envoyé mon formulaire, basé sur la réponse de php, je veux exécuter une autre fonction javascript ou ajax!appel javascript/ajax fonction de php

ceci est ma forme:

<form id="uploadForm" onsubmit="ytVideoApp.prepareSyndicatedUpload( 
    this.videoTitle.value, 
    this.videoDescription.value, 
    this.videoCategory.value, 
    this.videoTags.value); 
    return false;"> 
    Enter video title:<br /> 
    <input size="50" name="videoTitle" type="text" /><br /> 
    Enter video description:<br /> 
    <textarea cols="50" name="videoDescription"></textarea><br /> 
    <select style="display:none" name="videoCategory"> 
    <option style="display:none" value="Music">Music</option> 
    </select> 
    Enter some tags to describe your video 
    <em>(separated by spaces)</em>:<br /> 
    <input name="videoTags" type="text" size="50" value="video" /><br /> 
    <input id="butok" type="submit" value="go" > 
    </form> 

sur Soumettre lancer cette fonction javascript

ytVideoApp.prepareSyndicatedUpload = function(videoTitle, videoDescription, videoCategory, videoTags) { 
    var filePath = 'operations.php'; 
    var params = 'operation=makesomething' + 
       '&videoTitle=' + videoTitle + 
       '&videoDescription=' + videoDescription + 
       '&videoCategory=' + videoCategory + 
       '&videoTags=' + videoTags; 
    ytVideoApp.sendRequest(filePath, params, ytVideoApp.SYNDICATED_UPLOAD_DIV); 
} 

où ytVideoApp.sendRequest est:

ytVideoApp.sendRequest = function(filePath, params, resultDivName) { 
    if (window.XMLHttpRequest) { 
    var xmlhr = new XMLHttpRequest(); 
    } else { 
    var xmlhr = new ActiveXObject('MSXML2.XMLHTTP.3.0'); 
    } 

    xmlhr.open('POST', filePath); 
    xmlhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 

    xmlhr.onreadystatechange = function() { 
    var resultDiv = document.getElementById(resultDivName); 
    if (xmlhr.readyState == 1) { 
     resultDiv.innerHTML = '<b>Loading...</b>'; 
    } else if (xmlhr.readyState == 4 && xmlhr.status == 200) { 
     if (xmlhr.responseText) { 
     resultDiv.innerHTML = xmlhr.responseText; 
     } 
    } else if (xmlhr.readyState == 4) { 
     alert('Invalid response received - Status: ' + xmlhr.status); 
    } 
    } 
    xmlhr.send(params); 
} 

J'ai essayé avec: echo "<script>function();</script>" ne fonctionne pas print "alert ('quelque chose');"; ne fonctionne pas

tout 1 peut m'aider?

merci!

+0

Ceci? echo "" –

+0

echo ""; non – robert

Répondre

1

Vous pouvez probablement obtenir ce que vous voulez être changer:

resultDiv.innerHTML = xmlhr.responseText; 

à:

eval(xmlhr.responseText); 

Ceci est probablement une idée assez mauvaise, mais vous pouvez le faire de cette façon et tout retour de la le serveur sera exécuté en tant que javascript.

Une meilleure solution serait de modifier votre méthode ajax afin qu'elle prenne une fonction de rappel plutôt qu'un élément à mettre à jour. Il ressemblerait plus à ceci:

ytVideoApp.sendRequest = function(filePath, params, callback) { 
    ... 
    } else if (xmlhr.readyState == 4 && xmlhr.status == 200) { 
     if(callback) callback(xmlhr.responseText); 
    } 
    ... 

Et vous appelleriez comme ceci:

ytVideoApp.sendRequest(filePath, params, function(responseText) { 
    // Do something with the stuff sent back from the server... 
}); 

Mieux encore ... Utiliser un framework javascript, comme jQuery, Prototype, MooTools ou YUI.

+0

si un peut recevoir JSON, je peux démarrer une fonction javascript ?? – robert

+0

Vous pouvez recevoir JSON et vous pouvez le passer à une fonction javascript. Si vous avez un contrôle sur ce projet, alors vous devriez envisager d'utiliser jQuery, car cela facilite considérablement la tâche. Si vous voulez retourner JSON vous appelez jQuery.getJSON, si vous voulez retourner et exécuter javascript, alors vous appelez jQuery.getScript. – Prestaul