gpt4 book ai didi

php - HTML/AJAX/PHP同步和谐?异步可以工作吗?

转载 作者:行者123 更新时间:2023-11-30 13:27:57 25 4
gpt4 key购买 nike

我一直在研究桥接 javascript 以使用 Ajax 从 php 获取数据的最佳方法。并且一直试图将代码行保持在最低限度和最快的速度。我想出了一种通过 Object 传递 AJAX 值的方法,这样它就可以像通过引用传递一样进行更改,然后将其发回。但到目前为止,我只能同步执行此操作,因为在 AJAX 完成之前数据不可用。

要点是:我一直在寻找一种使用 javascript 访问我所有 PHP 内容的简单方法。如果愿意,构建一个简单的 javascript(GetSomePHPstuff) API。

由于我是网络编程的新手,我很想听听一些关于这方面的意见和反馈。这就是我的想法。

在这个例子中,我通过 javascript 将文本值从 html 发送到 ajax 再到 php,然后 php 将它发送回 ajax 返回到 javascript 返回到我的 html 页面。

这是我们简单的 HTML 类型文件。

TEST.html

<script language="javascript" src="ajax.js"></script>

<input type="text" id="text"/>
<input type="button" value="Return Text"
onClick="alert(ajaxReturnText(document.getElementById('text').value));"/>

这是 ajax/javascript 文件。

AJAX.js

function ReturnText(input, output){
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
output.value = xmlhttp.responseText;
}
}

xmlhttp.open("GET","php.php?text="+input,false);
xmlhttp.send();
}

function ajaxReturnText(input){
var output = new Object();
ReturnText(input, output);
return output.value
}

这是 PHP 文件

php.php

<?php 
function ReturnText($text){
return $text;
}
if($text = $_GET["text"]){
echo ReturnText($text);
die();
}
?>

最佳答案

这不能以这种方式异步工作。你必须明白这一行:

output.value = xmlhttp.responseText;

如果您异步定义它,将在 ajaxReturnText() 完成后执行。如果您同步定义,则 ajaxreturtext() 在请求完成之前不会继续。对我来说,你的问题是代码必须遵守基本规则,在你的情况下,你必须记住在“这里的更新函数”中定义 ajax 之后要做什么:

xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
output.value = xmlhttp.responseText;
/*define what to do next here*/
}

因此,您永远不会直接调用要异步执行的代码,而是从适当的函数内部调用它,查看完整代码:

<html>
<head>
<script type="text/javascript">
/*to be called synch*/
function ReturnText(input){
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
/*here define what to be called asynch*/
ajaxReturnText(xmlhttp.responseText);
}
}
xmlhttp.open("GET","php.php?text="+input,true);
xmlhttp.send();
}

/*to be called asynch*/
function ajaxReturnText(input){
var output = new Object();
output.value =input;
alert(output.value);
document.getElementById('test').innerHTML=
"This is the value of the object: "+input;
}
</script>
</head>
<body>
<div id="test"></div>
<input type="text" id="text"/>
<input type="button" value="Return Text"
onClick="ReturnText(document.getElementById('text').value);"/>
</body>
</html>

如果您想体验更多,我有一个类(class):see here

关于php - HTML/AJAX/PHP同步和谐?异步可以工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7831296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com