在ajax中调用PHP函数,不赞成使用同步XMLHttpRequest [英] Call PHP function in ajax, Synchronous XMLHttpRequest deprecarted
问题描述
对于 php / ajax .每个教程似乎都以一种或另一种方式过时了.已经花费了大约30个小时来尝试提出一个简单的插入/检索脚本.请帮忙!一旦我看到该代码可以正常工作,对我来说更容易弄懂它的文档.
Completely new to php/ajax. Every tutorial seems to be outdated in one way or another. Spent about 30 hours already trying to come up with a simple insert/retrieve script. Please help! Once i see the code working its alot easier for me to fiddle with it understand the documentation.
出现以下错误.
[Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience.
我的index.php相关数据,错误在 xmlhttp.open
行上.
My index.php relevant data, the error is on the xmlhttp.open
line.
disp_data();
function disp_data(){
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "update.php?status=disp",false);
这是我的update.php相关代码.在本教程中,应该在刷新时加载我的数据,但是它是空白的.我不确定为什么本教程将其设置为false,当我在w3schools阅读的文档ive似乎应该使它正确时,却无济于事.
This is my update.php relevant code. On the tutorial, it is supposed to load my data upon refresh, but its blank. I'm not sure why the tutorial sets it to false, when the documentation ive read at w3schools seems I should make it true, but neither work.
$status = $_GET["status"];
if ($status == "disp") {
$link = mysqli_connect("localhost", "root", "");
mysqli_select_db($link, "checkbox");
$ res = mysqli_query($ link,"SELECT * FROM table1");
我的完整index.php
$res = mysqli_query($link, "SELECT * FROM table1");
my full index.php
<div id ="disp_data"></div>
<script src="jquery-3.2.1.min.js"></script>
<script type ="text/javascript">
(function() {
var newXHR = null;
function sendXHR(type, url, data, callback) {
newXHR = new XMLHttpRequest() || new window.ActiveXObject("Microsoft.XMLHTTP");
newXHR.open(type, url, true); // Use async = true to avoid bad user experience for waiting a Sychronous request that might block the UI.
newXHR.send(data);
newXHR.onreadystatechange = function() {
if (this.status === 200 && this.readyState === 4) {
callback(this.response); // Callback function to process the response.
}
};
}
sendXHR("GET", "update.php?status=disp", null, function(response) {
document.getElementById("disp_data").innerHTML=newXHR.responseText;
});
})();
</script>
</body>
我的完整update.php文件
my full update.php file
$status = $_GET["status"];
if($status=="disp")
{
$link = mysqli_connect("localhost", "root", "");
mysqli_select_db($link,"checkbox");
$res = mysqli_query($link,"SELECT * FROM table1");
echo "<table>";
while($row = mysqli_fetch_array($res))
{
echo "<tr>";
echo "<td>"; echo $row["id"]; echo "</td>";
echo "<td>"; echo $row["name"]; echo "</td>";
echo "<td>"; echo $row["city"]; echo "</td>";
echo "</tr>";
}
echo "</table>";
}
推荐答案
您应在 async
参数中使用 true
.
类似这样的内容: xmlhttp.open("GET","update.php?status = disp",true);
.
请参见您可以使用此帮助函数来生成 XMLHttpRequest
.
You could use this helper function to make XMLHttpRequest
.
可在所有浏览器中使用,包括IE6.
var newXHR = null;
function sendXHR(type, url, data, callback) {
newXHR = new XMLHttpRequest() || new window.ActiveXObject("Microsoft.XMLHTTP");
newXHR.open(type, url, true); // Use async = true to avoid bad user experience for waiting a Sychronous request that might block the UI.
newXHR.send(data);
newXHR.onreadystatechange = function() {
if (this.status === 200 && this.readyState === 4) {
callback(this.response); // Callback function to process the response.
}
};
}
用法:
sendXHR("GET", "update.php?status=disp", null, function(response) {
console.log(response);
});
您可以使用此演示检索数据:
You could retrieve data by using this demo:
(function() {
var newXHR = null;
function sendXHR(type, url, data, callback) {
newXHR = new XMLHttpRequest() || new window.ActiveXObject("Microsoft.XMLHTTP");
newXHR.open(type, url, true); // Use async = true to avoid bad user experience for waiting a Sychronous request that might block the UI.
newXHR.send(data);
newXHR.onreadystatechange = function() {
if (this.status === 200 && this.readyState === 4) {
callback(this.response); // Callback function to process the response.
}
};
}
// Example 1: Get data.
var btnRequest = document.getElementById("btnRequest");
btnRequest.onclick = function() {
sendXHR("GET", "https://gist.githubusercontent.com/dannyjhonston/22851f9c21733973b2705b0b65443f90/raw/30cf99ceeb470a7ab6d2ffb51a78f1bb57f41ca3/data.txt", null, function(response) {
document.getElementById("myDiv").innerHTML = response; // response contains the data from the server.
});
};
// Example 2. Cancel a long request.
var btnCancelRequest = document.getElementById("btnCancelRequest");
btnCancelRequest.onclick = function() {
newXHR.abort(); // You can use the newXHR variable to abort a XMLHttpRequest that is taking long time to response, with the .abort() method.
};
})();
#myDiv {
border: solid 1px #ccc;
border-radius: 5px;
margin: 20px;
padding: 5px;
}
<button id="btnRequest" type="button">Request data</button>
<button id="btnCancelRequest" type="button">Cancel request</button>
<div id="myDiv">The new content will print here.</div>
很高兴知道这一点:
XMLHttpRequest.response
属性返回响应的身体.它可以是ArrayBuffer
,Blob
,Document
,JavaScript
对象或DOMString
,具体取决于XMLHttpRequest.responseType
属性.如果,则响应值为null请求未完成或未成功.但是,如果responseType
的值设置为"text"
或空字符串,响应可以包含部分文本响应,而请求是仍处于加载状态.
XMLHttpRequest.response
property returns the response's body. It can be of the typeArrayBuffer
,Blob
,Document
,JavaScript
object, or aDOMString
, depending of the value ofXMLHttpRequest.responseType
property. Value of response is null if the request is not complete or was not successful. However, if the value ofresponseType
was set to"text"
or the empty string, response can contain the partial text response while the request is still in the loading state.
XMLHttpRequest.responseText
属性返回 DOMString
包含对请求的响应的文本形式;如果为 null
,则为 null
请求失败或尚未发送. responseText
属性会在到达之前就具有部分响应请求已完成.如果 responseType
设置为除空的 string
或"text"
,访问 responseText
会抛出 InvalidStateError
异常.
XMLHttpRequest.responseText
property returns a DOMString
that contains the response to the request as text, or null
if the
request was unsuccessful or has not yet been sent. The responseText
property will have the partial response as it arrives even before the
request is complete. If responseType
is set to anything other than
the empty string
or "text"
, accessing responseText
will throw
InvalidStateError
exception.
您的 php 的问题的代码必须是这样的:
Your php code must be like this:
$status = $_GET["status"];
if($status=="disp")
{
$link = mysqli_connect("localhost", "root", "");
mysqli_select_db($link,"checkbox");
$res = mysqli_query($link,"SELECT * FROM table1");
$html = "<table>"; // Declare a variable to concat the html content.
while($row = mysqli_fetch_array($res))
{
$html += "<tr><td>";
$html += $row["id"];
$html += "</td><td>";
$html += $row["name"];
$html += "</td><td>";
$html += $row["city"];
$html += "</td></tr>";
}
$html += "</table>";
echo $html; // Prints the $html variable.
}
在您 html 代码的问题中,您需要删除:
In you html code you need to remove:
<script src="jquery-3.2.1.min.js"></script>
如果您要使用本机 javascript的问题,则没有必要.
这篇关于在ajax中调用PHP函数,不赞成使用同步XMLHttpRequest的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!