无法运行响应

如何解决无法运行响应

我有一个表单,我正在使用 jquery.ajax 在后台运行 PHP 代码。问题是当我收到脚本的响应时,我的 Javascript 代码不能很好地处理它。

如果我使用 if (status == "success") 它可以工作(但这不是处理此操作的正确方法),但是如果我使用 if (response == "allok"),它不起作用,提交表单停止工作。 (no messages in Console)

使用 alertecho,我可以看到“response”的正确值,但出于某种原因,如果我在 if 中使用此值,整个 script 停止运行。这是为什么?

HTML 代码:

<form id="form" class="registrazione" action="ajax/verifica.php" method="POST">
    <input type="text" id="username" name="username" class="username" placeholder="Nome utente..." autocomplete="off" autofocus>
    <input type="text" id="email" name="email" class="email" placeholder="Email..." autocomplete="off">
    <input type="password" id="password" name="password" class="password" placeholder="Password..." autocomplete="off">
    <input type="password" id="conferma_password" name="conferma_password" class="password" placeholder="Riscrivi la password..." autocomplete="off">
    <p id="risultato"></p>
    <input type="submit" id="form_button" name="form_button" class="form_button" value="Continua">
</form>

JS代码:

$(document).ready(function() {

  $("#form").submit(function(event) {

    event.preventDefault();
    var username=$("#username").val();
    var email=$("#email").val();
    var password=$("#password").val();
    var conferma_password=$("#conferma_password").val();
    var submit=$("#form_button").val();

    $.ajax({
      url: "ajax/verifica.php",method: "POST",data: {
        username: username,email: email,password: password,conferma_password: conferma_password,submit: submit
      },dataType: "text",success: function(response,status){
        if (response == "allok") {
          $("#risultato").html('Risposta='+risposta+' Status='+status);
          // alert('Account creato!');
        }
        if (status == "error") {
          alert("Ops! Si è verificato un errore interno momentaneo. Riprova più tardi,grazie.");
        }
      },error: function() {
        alert("Ops! Generic error.");
      }      
    })

  })

});

PHP 代码:

if (isset($_POST['submit'])) {

  $username=$_POST['username'];
  $email=$_POST['email'];
  $password=$_POST['password'];
  $conferma_password=$_POST['conferma_password'];

  $errorMessage=false;
  $errorUsername=false;
  $errorEmail=false;
  $errorPassword=false;
  $errorConfermaPassword=false;

  $username_regex="/^[a-z0-9._-]{2,35}$/i";
  $password_regex="/^(?=.*\d.*\d)[0-9A-Za-z!@#$%*]{8,}$/";

  if (empty($username)) {
    echo "Write a username.";
    $errorUsername=true;
    $errorMessage=true;
  }

  if (empty($email)) {
    echo "Write a email.";
    $errorEmail=true;
    $errorMessage=true;
  }

  if (empty($password)) {
    echo "Write a password.";
    $errorPassword=true;
    $errorMessage=true;
  }

  if (empty($conferma_password)) {
    echo "Password check again.";
    $errorConfermaPassword=true;
    $errorMessage=true;
  }

  if ($password!=$conferma_password) {
    echo "Password check.";
    $errorPassword=true;
    $errorMessage=true;
  }

  if (!preg_match($username_regex,$username)) {
    echo "Not a valid username.";
    $errorUsername=true;
    $errorMessage=true;
  }

  if (!filter_var($email,FILTER_VALIDATE_EMAIL)) {
    echo "Not a valid email address.";
    $errorEmail=true;
    $errorMessage=true;
  }

  if (!preg_match($password_regex,$password)) {
    echo "Not a valid password.";
    $errorPassword=true;
    $errorMessage=true;
  }

  $query="SELECT id,nome,cognome FROM test WHERE username='$username'";
  $result=mysqli_query($connessione,$query);

  if ($result->num_rows > 0) {
    echo "Username not available.";
    $errorUsername=true;
    $errorMessage=true;
  }

  if ($errorMessage==false) {
    echo "allok";
  }

}
else {
  echo "Generic error.";
}

解决方法

您只是将一个字符串回显到您的 AJAX 脚本中。 它正在接收以下字符串之一:

  • 输入用户名
  • 写一封电子邮件
  • 输入密码
  • (等你所有的回声)

这些都将直接返回到 AJAX 脚本的成功处理程序,但在该处理程序中,您需要两个参数。这些将由您从 PHP 脚本回显的任何内容填充,在您的情况下是上述之一。

此外,在这种情况下,第二个参数是“状态”,如果 AJAX 调用被引导到“成功”处理程序,那么它应该总是“成功”。因此,永远不会到达您的“成功”处理程序中有关“错误”的 if 语句。

您可能想在 PHP 文件中尝试以下操作:

$response = new StdClass;
$response->status = 'success';
$response->message = <any of the above statements>;

$response = json_encode($response);

echo $response;

然后在您的 AJAX 脚本中,您可以使用以下内容:

success: function(response){

              if (response.status == "allok") {
              $("#risultato").html('Risposta='+risposta+' Status='+status);
              //alert('Account creato!');
              }
              if (response.status == "error") {
              alert("Ops! Si è verificato un errore interno momentaneo. Riprova più tardi,grazie.");
              }

此外,我不鼓励在您的代码中使用除英语之外的任何其他语言。混淆意大利语和英语变量名会使您的代码更难阅读。我在经验不足的程序员编写的代码中经常遇到这种情况。

,

对于未来的读者,PHP 文件中有一段 JS 代码,它会自动包含在响应字符串中。所以这就是问题所在。我修复了它,删除了 JS 代码并将其发布在正确的位置(例如在 HTML 代码中)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-