进行php-ajax类型回调的正确方法



我希望能够继续学习PHP。我现在最大的障碍是试图更好地理解AJAX类型的调用在PHP中的最佳使用方式。

我知道我可以做一个简单的Javascript类型的AJAX,我从例子中找到了。。。

        var formdata = new FormData();
        formdata.append("fileid", "somedata";
        var ajax = new XMLHttpRequest();
        ajax.open("POST", "Page.php");
        ajax.send(formdata);

我想知道的是,快速回复以等待网页回复你的发布数据的最佳做法是什么?

例如,如果我有一个网页,它有一个按钮来[POST]一些数据,但在接收页面上,它可能需要10-20秒才能完成所有数据。从逻辑上讲,我只想抛出一个"div",上面写着"加载"或"处理",直到页面完全完成。我不能只做一个正常的POST,因为当前页面将一直等待并卡住,直到它完全完成。

所以我想做一个AJAX类型的调用来发布数据,我假设使用上面的例子,然后在它完成后检查发送回的数据的结果(或响应),然后决定从那里说什么"完成"或"失败"等等。

做这件事最好的方法是什么?

有一个带有JQuery的HTML页面,它将提交到下面的PHP页面,并返回一个JSON负载,该负载带有下一个HTML+JavaScript页面将用于查询另一个PHP页面的ID。

PHP将项目添加到队列

// please don't use this exactly as this isn't safe for SQL-injection
mysqli_query("INSERT INTO tasks (1,2,3,4,5,5,6,7,4,3,"this is data that was POST via the FORM using AJAX to this PHP page","incomplete")");
$id = mysqli_insert_id();
// create array to hold return values
$arr = array('id' => $id);
// return JSON to jquery
echo json_encode($arr);

PHP查询ID的状态

$result = mysql_fetch_array("SELECT status FROM tasks WHERE id = " + $id, $connection);
if($result['status'] == 'complete') {
    $arr = array('id' => $id, 'status' => $result['status'], 'payload' => $result);
}
else {
    $arr = array('id' => $id, 'status' => $result);
}
echo json_encode($arr);

在HTML+JavaScript页面上,检查JSON负载状态是否已完成。。。然后收回所有数据

这确实是一个粗糙的例子,但概念非常简单,您正在将数据插入SQL表中。然后,您将创建一个服务/CRON作业来处理此表,并在处理完成时更改状态。

关于的代码比任何东西都更像是伪代码,需要明确的是,还有很多其他排队系统可以做到这一点。

我为您做了一个简单的例子。请看一看,我想这会帮助你理解

<table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td><input type="text" name="name" id="name" onchange="callajax(this.value)" /></td>
      </tr>
      <tr>
        <td id="address">Show output here</td>
      </tr>
    </table>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
      <script>
      function callajax(s_id)
        {
            $.post("ajax.php", {id:s_id}, function(data){

                $('#address').val(data);

            });
        }
      </script>
      //your ajax.php php page
      <?php
      echo "I am here ".$_POST['id'];
      ?>

最新更新