首页 > 解决方案 > 使php脚本等到ajax请求完成

问题描述

我是 php 新手,所以请和我一起裸露。我有一个 ajax 函数,它创建一个发布请求以将数据发送到服务器端 php 并回显它,我的代码应该可以正常工作。问题是 php echo 在create()函数运行之前正在处理,因此仅显示未找到变量的错误。php中有没有办法让echo proccess等到ajax函数运行。任何帮助表示赞赏。预先感谢。

function create() {
  $.ajax({
    url: "test.php",
    type: "post",
    dataType: 'json',
    data: {
      registration: "success",
      name: "xyz",
      email: "abc@gmail.com"
    },
    success: function(result) {
      console.log(result.abc);
    }
  });
}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>

<button onclick="create()">click me</button>

<?php 
  $registration = $_POST['registration'];
  $name= $_POST['name'];
  $email= $_POST['email'];

  if ($registration == "success"){
    echo json_encode(array("abc"=>'successfuly registered'));
  }
?>
更新:检查是否有 POST 请求以处理脚本但没有回显。

function create() {
  $.ajax({
    url: "test.php", //the page containing php script
    type: "post", //request type,
    dataType: 'json',
    data: {
      registration: "success",
      name: "xyz",
      email: "abc@gmail.com"
    },
    success: function(result) {
      console.log(result.abc);
    }
  });
}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>

<button onclick="create()"> Click me</button>

<? php 
  if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $registration = $_POST['registration'];
    $name= $_POST['name'];
    $email= $_POST['email'];
    
    if ($registration == "success"){
    // some action goes here under php
       echo json_encode(array("abc"=>'successfuly registered'));
    }  
  }
?>

标签: javascriptphpajax

解决方案


假设您的scriptbutton标签与 php 脚本存在于同一个文件中,就像您的问题中显示的那样:您的代码乱序运行,因为正如您自己指出的那样,您在函数运行之前运行PHP代码create仅仅因为您按顺序编写代码并不意味着它会按顺序运行。

这是发生的事情,按顺序:

  1. script并且button标签被渲染
  2. 您的 php 代码运行
  3. 步骤 1 和 2 的结果发送到浏览器
  4. 然后有人点击按钮

您需要做的是将 php 脚本移动到仅在按钮 blick 时请求的单独路由。例如test.php,假设您在 q 中显示的代码尚未存在于该文件中——在这种情况下,您需要将 php 代码放在不同的文件中。


推荐阅读