php脚本返回一个值,第一个警报正常工作。
我无法在第二个警报中引用httprequest返回的值。理想情况下,我会调用函数get_captcha() - 它会返回值 - 它只是我不知道如何做到这一点。
我意识到在全球范围内设置变量可能不是最好的方法,但这是我唯一能想到的 - 我对替代方案持开放态度。
<script type="text/javascript">
var url = "captcha_get_code.php"; // The server-side script
var cap;
function ValidateForm() {
get_captcha()
alert(cap); //undefined
}
function get_captcha() {
http.open("GET", url, true);
http.onreadystatechange = handleHttpResponse;
http.send(null);
}
function handleHttpResponse() {
if (http.readyState == 4) {
if (http.status==200) {
//return http.responseText;
cap=http.responseText;
alert(cap); //this one works
}
}
}
function getHTTPObject() {
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}
else if (window.ActiveXObject){
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
if (!xmlhttp){
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
}
}
return xmlhttp;
}
var http = getHTTPObject(); // We create the HTTP Object
</script>
答案 0 :(得分:6)
您无法从成功的XMLHttpRequest调用中“返回”值。您可以执行您需要的任何类型的处理内部回调函数。
XMLHttpRequests是异步执行的。你不能让你的代码“等待”它们(除非你让它们同步)(你真的,真的不应该这样做)。但是,没有必要,因为运行时系统会在请求完成时调用“readystatechange”处理程序。从该代码中,您可以随心所欲地做任何事情。
这个事实要求你对如何编写代码有所不同,但实际上并没有那么多的调整。例如,如果您倾向于编写“processResults()”函数,那么您仍然可以这样做 - 您只需从内部“readystatechange”处理程序中调用它。
答案 1 :(得分:1)
我看到这个帖子已经4年了,但它有错误答案!
您可以从成功的XMLHttpRequest调用中获取返回值。 我的项目使用WebSocket,但它使用XMLHttpRequest上传图像。
In a javascript, call uploadSend(containerID) where all <img> are stored. // ----- uploadSend() // ----- This function sends all objects in a container (containerID) // ----- All object has to be <img> FILE: upload.js function uploadSend(containerID) { var elm = document.getElementById(containerID); for (i=0; i<elm.childNodes.length; i++) { var form = new FormData(); form.append('id', elm.childNodes[i].id); form.append('src', elm.childNodes[i].src); TOS(form); } } function xhrState(self) { if ((self.readyState == 4) && (self.status === 200)) console.log(self.responseText); } function xhrProgress(event) { if (event.lengthComputable) if (event.loaded == event.total) console.log('Image 100% uploaded.'); } function TOS(form) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { xhrState(this); } xhr.open('POST', '/upload.php'); xhr.upload.onprogress = function(event) { xhrProgress(event); } xhr.send(form); } FILE: upload.php header("Content-type: text/plain"); $filename = '/var/www/public/upload/'.microtime(true); // ----- Save a complete file for what we did get. $hnd = fopen($filename . 'TXT', 'wb'); fwrite($hnd, print_r($_COOKIE, true)); fwrite($hnd, print_r($_GET, true)); fwrite($hnd, print_r($_FILES, true)); fwrite($hnd, print_r($_POST, true)); fclose($hnd); // ----- Save just jpg for the images we did get. $hnd = fopen($filename . 'jpg', 'wb'); $image = explode(',', $_POST['src']); fwrite($hnd, base64_decode($image[1])); fclose($hnd ); // ----- Type the result that you want back. echo "{$filename}.jpg";