草庐IT

javascript - Ajax/JSON请求到php处理页面

coder 2024-05-03 原文

我正在为我的大学学位使用 html5、ajax、JSON 和 php 创建一个电话应用程序。此应用程序必须与 mysql 数据库通信,因此使用 ajax Json 与 php 文件通信,然后处理对数据库的查询。然后将使用 phonegap 云服务对其进行打包。

登录页面使用表单获取用户名和密码,jQuery 和 JSON 然后通过登录页面上的脚本将其传递给 login.php。我可以让 jQuery 工作到一定程度,但是一旦我对 php 文件执行 SQL 查询,登录似乎就会挂起。我通过手动将输入变量放入 php 并在浏览器中运行页面来测试 php 进程多次,效果很好。您可以在 mobile app login 处看到登录信息.

我目前正在使用 $.getJSON 从输入表单发送变量,但我更喜欢使用帖子,但不太清楚。也不像使用 form action post 那样我可以使用 echo outs 来确保 php 正在做它的工作我找不到如何允许我使用类似的方法来检查我的 php 进程,因为使用 jquery/JSON,任何指导将不胜感激.

以下是我的脚本,我已经尝试让它工作 3 天了,但似乎无法让它工作,即使我已经尝试了在许多论坛上找到的许多不同的脚本,任何帮助都会非常有用赞赏

jquery/JSON 脚本************************

$(document).ready(function() {

    $("#submit").click(function()   {

    if($("#childs_name").val()=="" || $("#password").val()=="") {

    $("#add_err").html("Please enter childsname and password");

        return false;   

    }else{


    $("#add_err").html('<img src="images/ajax-loader.gif" width="16" height="16" alt=""/>');
    var childsname=$("#childs_name").val();
    var password=$("#password").val();

        $.getJSON("includes/login.php",{username:childsname,password:password},function(json)   {
//Parse JSON data if json.response.error = 1 then login successfull
                        if(json.response.error == "1")
                        {
                            $("#add_err").html( "Welcome "+childsname+"");
//login successfull, write code to Show next page here                          
                            window.location= "menu.html";                           

                        }else

                        if(json.response.error == "2")
                        {
                            $("#add_err").html( "Details do not exsist in Database. Please contact the School");
                        }
        });//get json
    }   



});//submit click
});//doc ready

PHP ***********************************

//include_once 'db_connect.php';

if(!isset($_GET['submit'])) {

//check if childsname is empty  
    if(empty($_GET['childsname'])) {

        echo '{"responce":{"error": "1"}}';


    }else{
        $childs_name = $_GET['childsname'];
        echo '{"responce":{"error": "0"}}';
    }//end of chidsname

//check if password is empty    
    if(empty($_GET['password'])) {

        echo '{"responce":{"error": "1"}}';


    }else{
        $password = $_GET['password'];
        echo '{"responce":{"error": "0"}}';
    }//end of password


//query database
$query = "SELECT * FROM app Where child_name = '$childs_name'";
$results = mysqli_query($mysqli, $query);   

// Loop through results
//    if($result->num_rows >= 1){    
//      $row = $result->fetch_array(MYSQLI_ASSOC);  
//          if ($row['childs_name'] = '$childs_name'){
//  
while ($row = mysqli_fetch_array($results, MYSQLI_BOTH)){

    if($_GET['childsname'] == $row['child_name'])   {   
            echo '{"responce":{"error": "1"}}';
//           header("Location: ../menu.html");
             }else{

                echo '{"responce":{"error": "2"}}';

             }
    }




//**************************************************************submit      
  echo '{"response":{"error": "1"}}';
}
else
{
  echo '{"response":{"error": "0"}}';
}

我的表单 HTML **********************************

<body class="body">

<div id="logo"></div>
<div class="loginForm">

  <form id="login" name="login" method="post" action="includes/login.php">
    <input name="childs_name" type="text" id="childs_name" form="login" placeholder="Childs Name">
    <input name="password" type="password" id="password" form="login" placeholder="Password">
<input name="submit" class="submit" type="button" id="submit" formaction=""value="Submit">
  <input name="reset" type="reset" id="reset" form="login" value="Reset">
  <div id ="add_err" class="add_err"></div>  
  </form>  
</div>
<div class="l-a"></div>
<div class="tagLine">Little minds with big ideas</div>


</body><!--body-->
</html>

jQuery 和 JSON 对我来说是新的,所以我希望我的代码是可疑的,我遗漏了一些简单的东西,我也希望我已经提供了足够的信息来提供帮助,以防万一有人认为我已经放入了太多代码然后我只想提供我认为需要的尽可能多的信息

最佳答案

首先更新您的 php 文件: 1.取消注释

//include_once 'db_connect.php';
  1. 在这一行之后添加这一行:

    header('Content-Type: application/json');   //this one will tell the server to send a json object back to client (by default it sends text/html)
    
  2. 不要使用 echo 'something';。而是像这样在 $result 变量中获取结果:

    $result = array ( 'response' => array('status'=>'error', 'message' => 'password is missing')); //this is just an example for the missing password line 
    

在脚本末尾使用这个:

echo json_encode($result);
exit();

附言将 PHP 脚本中的“响应”替换为“响应”。

这是您的 PHP 文件的外观:

<?php
include_once 'db_connect.php';
//Start the session if is not started it
//You need it to store here the user's name when he successfully logs in
if (!isset(session_id())) {
    session_start();
}
header("Content-Type: application/json");   //this will tell the browser to send a json object back to client not text/html (as default)
// This function will convert your variable (array) into a JSON object
function result($var){
    echo json_encode($var);
    exit();
}
if(!isset($_GET['submit'])) {

    //check if childsname is empty  
    if(empty($_GET['childsname'])) {
        $response = array('result'=>'fail', 'message' => 'missing childsname');
        result($response);
    }else{
        //Always escape your variables before using them in a database
        //I assumed $mysqli is your database connector
        $childs_name = mysqli_real_escape_string($mysqli, $_GET['childsname']);
    }

    //check if password is empty    
    if(empty($_GET['password'])) {
        $response = array('result'=>'fail', 'message' => 'missing password');
        result($response);
    }else{
        //Always escape your variables before using them in a database
        $password = mysqli_real_escape_string($mysqli, $_GET['password']);
    }


// Query database
$query = "SELECT * FROM app WHERE `child_name` = '$childs_name'";   // You also need to add:    AND `password_column_name` = '$password' LIMIT 1
$results = mysqli_query($mysqli, $query);
// Check if SQL query had erors   
if (!$results){
        $response = array('result'=>'fail', 'message' => 'sql error: ' . mysqli_error($mysqli));
        result($response);
}
// If query was successfull and there are rows do this:
if (mysqli_num_rows($results)>0){ 
    $_SESSION['username'] = $childs_name;
    //You may use this variable to check if the user is logged in like this:
    /*
    if (isset($_SESSION['username'])) {
        // user is logged in
        // do something here
    }
    */
    $response = array('result'=>'success', 'message' => 'user is authenticated'));
    result($response);
} else {
    $response = array('result'=>'fail', 'message' => 'user authentication failed');
    result($response);
}
?>

用这个替换你的 JavaScript 代码中的 getJSON 部分

$.getJSON("includes/login.php",{username:childsname,password:password},function(json)   {
    if(json.result === "success") {
        $("#add_err").html( "Welcome "+childsname+"!");
        //you should redirect to a php page, not a html one AND  on that page you should have a session started ( session_start();   )
        // and there you should check if :
        /*
        if (isset($_SESSION['username'])) {
            // user is logged in
            // do something here
        } else {
            //redirect the user back on this page(login_page)
        }
        */
        //wait two seconds before redirect, otherwise you say 'Welcome kiddo' for nothing because no one will ever see it :)
        setTimeout(function(){
              window.location= "menu.html"; 
        },2000);                          

    }else{
        $("#add_err").html(json.message);
    }
});

稍后更新以解释 php 中的 $response 数组:

//$response here is an PHP array with the following structure
$response = array('result'=>'fail', 
                  'message' => 'missing password');

当你打电话时

结果($响应);

此数组转换为具有以下结构的 JSON 对象:

{
     "response":"fail",
     "message": "missing password"
}

因为 result() 函数中的最后一条指令是 exit(); 脚本执行结束,结果在您的 getJSON 函数中返回给客户端。

关于javascript - Ajax/JSON请求到php处理页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29168330/

有关javascript - Ajax/JSON请求到php处理页面的更多相关文章

  1. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  2. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  3. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  4. ruby-on-rails - 如何使用 Rack 接收 JSON 对象 - 2

    我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":

  5. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  6. jquery - 如何将 AJAX 变量从 jQuery 传递到他们的 Controller ? - 2

    我有一个电子邮件表格。但是我正在制作一个测试电子邮件表单,用户可以在其中添加一个唯一的电子邮件,并让电子邮件测试将其发送到该特定电子邮件。为了简单起见,我决定让测试电子邮件通过ajax执行,并将整个内容粘贴到另一个电子邮件表单中。我不知道如何将变量从我的HAML发送到我的Controllernew.html.haml-form_tagadmin_email_blast_pathdoSubject%br=text_field_tag'subject',:class=>"mass_email_subject"%brBody%br=text_area_tag'message','',:nam

  7. ruby - 在 ASP 页面上 Mechanize 中断 - 2

    require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie

  8. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  9. Ruby-vips 图像处理库。有什么好的使用示例吗? - 2

    我对图像处理完全陌生。我对JPEG内部是什么以及它是如何工作一无所知。我想知道,是否可以在某处找到执行以下简单操作的ruby​​代码:打开jpeg文件。遍历每个像素并将其颜色设置为fx绿色。将结果写入另一个文件。我对如何使用ruby​​-vips库实现这一点特别感兴趣https://github.com/ender672/ruby-vips我的目标-学习如何使用ruby​​-vips执行基本的图像处理操作(Gamma校正、亮度、色调……)任何指向比“helloworld”更复杂的工作示例的链接——比如ruby​​-vips的github页面上的链接,我们将不胜感激!如果有ruby​​-

  10. ruby - HTTP 请求中的用户代理,Ruby - 2

    我是Ruby的新手。我试过查看在线文档,但没有找到任何有效的方法。我想在以下HTTP请求botget_response()和get()中包含一个用户代理。有人可以指出我正确的方向吗?#PreliminarycheckthatProggitisupcheck=Net::HTTP.get_response(URI.parse(proggit_url))ifcheck.code!="200"puts"ErrorcontactingProggit"returnend#Attempttogetthejsonresponse=Net::HTTP.get(URI.parse(proggit_url)

随机推荐