Javascript 访问数据库时的AJAX和JQUERY

Javascript 访问数据库时的AJAX和JQUERY,javascript,jquery,mysql,ajax,Javascript,Jquery,Mysql,Ajax,你好 我在访问数据库时使用AJAX和JQUERY时遇到问题。 从网上搜索后,我认为这个脚本适合我的问题。我试图模仿它,但失败了 我的代码: userValidation.php include '..\assets\database\connect.php'; $userLN = $_GET['userLN']; $userFN = $_GET['userFN']; // $userMN = $_GET['userMN']; $regStatus=''; $i=0; $getInfo = ar

你好

我在访问数据库时使用AJAX和JQUERY时遇到问题。 从网上搜索后,我认为这个脚本适合我的问题。我试图模仿它,但失败了

我的代码: userValidation.php

include '..\assets\database\connect.php';
$userLN = $_GET['userLN'];
$userFN = $_GET['userFN'];
// $userMN = $_GET['userMN'];
$regStatus='';

$i=0;
$getInfo = array();
$valLN=$valFN=$valMN='';
$query = "SELECT studLastname, studFirstname, studMiddlename FROM tblstudentinfo ";
$query .= "WHERE studLastname=? AND studFirstname=?";
$stmt = $conn->prepare($query);
$stmt->bind_param('ss',$userLN,$userFN);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows > 0){
    $stmt->close();
    $conn->close();
    $regStatus='exist';
}else{
    $regStatus='not exist';
}
echo json_encode($regStatus);
index.php

$('#btnNext').click(function() {
    var regStatus='';
    var urlParam='';
    var LN = document.getElementById('studRegLN').value;
    var FN = document.getElementById('studRegFN').value;
    urlParam="userLN="+LN+"&userFN="+FN;
    $.ajax({
      url: 'ajax/userValidation.php',
      data: urlParam,
      type: 'GET',
      dataType: 'json',
      success: function(data)
      {
        regStatus=data;
        alert(regStatus);
      }
    });
  });
我的设想: 当管理员用户注册学生助理时,它将输入姓和名。当在访问页面的下一部分之前单击“下一步”按钮时,它将首先验证S.Astudent Assistant是否已存在

所以有$regStatus和var regStatus变量。。。我想用警惕;只是为了测试变量是否从$regStatus传递到regStatusjava变量

但是,如果你有更好的方法来做到这一点,那么请随意发布你的建议+代码。多谢各位

更新 这是我的截图,证明代码不起作用


注意下一个按钮。。。我刚刚单击了它,但没有类似于Ajax调用的alertgetStatus弹出窗口

    var lanme=document.getElementById('studRegLN').value;
    var fname=document.getElementById('studRegFN').value;
    $.ajax({
     url: 'ajax/userValidation.php',
     type:'GET', /* GET or POST */     
     data: {
            userLn:lname,
            userFn:fname
            },
     dataType: 'json',
     success: function(data)
     {
       regStatus=data;
     }
    });
嘿,我是新手,很抱歉我的英语不好。

用这个改变你的ajax

有几个问题:

1不使用URL编码查询字符串参数值,特别是因为它们是名称,可能很容易包含查询字符串上不允许的字符。让jQuery通过传递一个对象作为数据来处理这个问题。N.B.也可以考虑将此请求发送为POST,那么值将在请求体中,并且不会在QuielStudio上引起问题。

2不清楚在声明click事件处理程序之前是否要等到文档完全加载。在问题的早期版本中,单击处理程序中有一个document.ready块,这没有任何意义。如果还没有,请将按钮单击代码包装在document.ready处理程序中,以确保在尝试绑定到DOM时,DOM中已经存在按钮。还要确保您使用了正确的ID选择器-我看不到您的HTML,因此无法为您检查

3个Ajax调用是异步的,因此如果您想查看regStatus的更新值,请按照Priyank的建议将您的警报放在success函数中。否则,警报将在ajax调用完成之前运行,因此您将看不到更新的值

4不清楚您再次使用了什么类型的按钮,您的问题中缺少HTML,但如果是提交类型,则它将同时发回页面,除非您在JS代码中明确禁止。如果它发回,那么页面将被销毁,您的ajax请求将不会运行,或者来自它的响应将丢失,因为它运行的页面已被销毁

把这些放在一起会产生如下结果:

$(function() { //don't declare click handler until document is fully ready and all HTML elements are loaded.
  $('#btnNext').click(function(event) {
    event.preventDefault(); //prevent default button postback behaviour, if any
    var regStatus='';
    var LN = document.getElementById('studRegLN').value;
    var FN = document.getElementById('studRegFN').value;

    $.ajax({
      url: 'ajax/userValidation.php',
      data: { //let jQuery do the URL-encoding for you
            "userLN": LN,
            "userFN": FN
      },
      type: 'GET',
      dataType: 'json',
      success: function(data)
      {
        regStatus = data;
        alert(regStatus); //alert must be in here to definitely delay executing the alert until the variable is populated from the asynchronous server response
      },
      error: function(jqXHR) { //handle ajax errors
        alert("Error: " + jqXHR.responseText);
      }
    });
  });
});

添加类型:GET,在您的ajax中,并尝试在ajax的成功中添加警报。我感到羞耻,但我将把GET放在哪里?我查看了w3school站点,但它缺少jquery ajax get/PostLower中的示例数据:urlParam,add type:GETlet me,如果它不是像这样工作的话?键入:“get”,不起作用。。。再加上success:functiondata{regStatus=data;alertregStatus;}中的alertgetStatus,当我将代码放入该success中时,控制台中是否出现任何错误?如果是,请在此提及。您是否在index.php页面中包含了Jquery库?它现在起作用了。。您的代码为什么因为回音“…..”;而无法工作的问题如果$stmt->num_rows>0,则在内部{.如果我删除那一行代码..弹出窗口中将显示单词exist..谢谢男士请验证我的回答如果用户在其中任何一个字段中输入任何特殊字符,它将中断。有关可接受字符和有问题字符的列表,请参阅。根据我的回答,可以使用jQuery来处理此问题,也可以手动调用EncodeUri每个字段上的组件。您好!欢迎使用stackoverflow:-很遗憾您的代码不起作用..我无法显示alertregStatus的值它是'exist'或'not exist',这些是我想要得到的值,因为我将把该变量放在'if'条件中SP对变量名称区分大小写,所以userLn必须是userLn,对于其他o你忘了提醒。当服务器需要GETyes@ADyson时,你的评论-GET或POST是不可互换的!区分大小写是错误的,/*GET或POST*/用于信息。不要误会。代码和你的其他建议一样工作,但这不起作用……第一,当我输入jquery url编码时,警告代码没有出现…但是如果我坚持我的第一个代码,它是有效的…顺便说一句,我的uservalidation.php上的echo“..”是我的警报不起作用的原因…我在上面的php代码中没有看到echo“..”,否则我会提到它。但这可以解释它,因为这意味着响应不是有效的JSON,所以jQuery无法根据o dataType:json指令。奇怪的是,urlEncoding不起作用,它应该使它更健壮。你确定你正确地遵循了我的示例吗?再次,在中检查你的ajax请求
使用浏览器工具可以查看该实例中实际提交的内容,以及它与您的版本之间的差异。当我测试我的版本时,它会生成一个类似于ajax/userValidation.php的URL?userLn=kjkjdfg&userFn=dfgjhdfkjg,这似乎很好。我将重试您的代码。。顺便说一下,我没有包括$function{上次我尝试你的codelast注释时..顺便说一句,关于button,我使用type=button,因为我开始将所有项目转换为AJAX..我注意到所有查询比我以前的代码快10倍..就像加载5k记录一样,加载需要1分钟..但当我将代码转换为AJAX时,只需要几秒钟:-
$(function() { //don't declare click handler until document is fully ready and all HTML elements are loaded.
  $('#btnNext').click(function(event) {
    event.preventDefault(); //prevent default button postback behaviour, if any
    var regStatus='';
    var LN = document.getElementById('studRegLN').value;
    var FN = document.getElementById('studRegFN').value;

    $.ajax({
      url: 'ajax/userValidation.php',
      data: { //let jQuery do the URL-encoding for you
            "userLN": LN,
            "userFN": FN
      },
      type: 'GET',
      dataType: 'json',
      success: function(data)
      {
        regStatus = data;
        alert(regStatus); //alert must be in here to definitely delay executing the alert until the variable is populated from the asynchronous server response
      },
      error: function(jqXHR) { //handle ajax errors
        alert("Error: " + jqXHR.responseText);
      }
    });
  });
});