正确的方法做php ajax类型的回拨

时间:2015-11-23 03:08:00

标签: javascript 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类型的调用来发布数据,我假设使用上面的例子,然后一旦完成检查发回的数据的结果(或响应),然后决定从那里说什么"完成"或者"失败"等

最好的办法是什么?

2 个答案:

答案 0 :(得分:2)

拥有一个带有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作业来处理此表并在处理完成时更改状态。

有关代码的内容比任何代码都要多,很明显有很多其他排队系统可以做到这一点。

答案 1 :(得分:0)

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

<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'];
      ?>