使用 Phonegap、AJAX、PHP 和 mySQL 登录不工作

Posted

技术标签:

【中文标题】使用 Phonegap、AJAX、PHP 和 mySQL 登录不工作【英文标题】:Login with Phonegap, AJAX, PHP and mySQL not working 【发布时间】:2014-10-21 02:16:04 【问题描述】:

我在论坛中搜索了任何对我有帮助的东西,但没有任何效果......我正在尝试使用 AJAX 调用位于远程服务器中的 php 文件在 Phonegap 上登录,但 PHP 文件没有返回任何内容...我发布我的代码:

AJAX 调用:

$.ajax(
    type: "POST",
    data: 'userMail='+user+'&userPassword='+password,
    dataType : 'html',
    url : "http://www.eega.nl/app/login.php",
    crossDomain: true,
    async: false,
    success: function(data)
        if(data!='error')
            window.localStorage["userId"] = data;
            location.href = "schedule.html";
        else
            alert("failed login");
            location.href = "index.html";
        
    ,
    error: function()
        alert("error");
        window.open('schedule.html');
          
);

PHP 文件:

<?php
  include 'connect.php';
  header('Access-Control-Allow-Origin:*'); 
  header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS, REQUEST');
  header('Content-Type: application/json; charset=utf-8');
  header('Access-Control-Max-Age: 3628800');
  $data = array();

  $userMail = $_POST["userMail"];
  $userPassword = $_POST["userPassword"];
  $cryptpass = md5($userPassword);

  $sql = "SELECT tr_adr_id FROM elo_users WHERE email = '" . $userMail . "' AND crypt = '" . $cryptpass . "'";
  //mysql_real_escape_string($userMail),
  //mysql_real_escape_string($cryptpass));
  $result = mysqli_query($sql);
  //if($data = mysql_fetch_array($result))
  while($row = mysqli_fetch_array($result)) 
    $data = $row['tr_adr_id'];
  
  echo $data["tr_adr_id"];

  mysqli_free_result($data);

  mysqli_close();

?>

我尝试使用 POST 和 GET 进行 AJAX 调用,并在 PHP 文件中使用 $_POST、$_GET 和 $_REQUEST 进行 AJAX 调用,但这些对我没有任何作用...

提前感谢您!我仍在努力找出我的代码中有什么问题......

已编辑:

index.html:

<!DOCTYPE HTML>
<html>
<head>
    <meta name="viewport" content="width=320" user-scalable="no" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link rel="stylesheet" href="css/bootstrap-theme.min.css">
    <link rel="stylesheet" href="css/docs.min.css">
    <link rel="stylesheet" href="css/jquery.mobile-1.4.3.min.css">
    <link rel="stylesheet" href="css/general.css">
    <script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>

    <script src="js/bootstrap.min.js"></script>  
    <script src="js/functions.js"></script>
    <title>EegaApp</title>

    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
</head>
<body>
    <script type="text/javascript" src="js/jquery.mobile-1.4.3.min.js"></script>
    <div id="eegaLogo">
        <img class="bottom" src="images/eega_logo_loading.jpg"/>
        <img class="top" src="images/eega_logo.jpg"/>
    </div>
    <a href="http://www.eega.nl/" data-mini="true" style="color:red; position: absolute; margin-left:35%; margin-top:43.5%; text-decoration:none;">www.eega.nl</a>

    <!--*********Login form********-->
    <form id="loginForm" class="form-signin" role="form" style="width:50%; text-align: center; margin-top: 55%; margin-left: 25%;" method="post">
        <input id="userMail" name="userMail" class="form-control" type="email" autofocus="" required="" placeholder="Email"></input>
        <input id="userPassword" name="userPassword" class="form-control" type="password" required="" placeholder="Password"></input>
        <div>
            <input type="checkbox" name="checkbox-0" id="checkbox-mini-0" class="custom" data-mini="true" />
            <label for="checkbox-mini-0">Remember me</label>
        </div>
        <button type="submit" data-mini="true" onClick="login()">Login</button>
    </form>
    <!--*********End form*********-->

    <!--THIS LINE IS JUST FOR TEST-->
    <a href="schedule.html">schedule</a>

    <!--*********Footer*********-->
    <div id="footer">
        <script>
            function openExternal(elem) 
                window.open(elem.href, "_system");
                return false; // Prevent execution of the default onClick handler 
            
        </script>
        <a class="col-xs-4" href="http://9292.nl/#" target="_blank" onClick="javascript:return openExternal(this)"><img id="footer-icon" src="images/9292_icon.jpg" style="width: 60px; height: 60px;"/></a>
        <a class="col-xs-4" ><img id="footer-icon" src="images/maps_icon.jpg" style="width: 60px; height: 60px;"/></a>
        <a class="col-xs-4" ><img id="footer-icon" src="images/call_icon2.jpg" style="width: 60px; height: 60px;"/></a>
    </div>
    <!--********End footer*********-->
</body>

【问题讨论】:

使用var_dump($data["tr_adr_id"]) 来查看该变量中是否存在某些内容.. 因为我认为存在问题.. 您已经获得了子元素$data = $row['tr_adr_id'];,然后在echo $data["tr_adr_id"]; 再次迭代..我认为你应该只是echo $data; 好的!谢谢,我现在就试试! 您的 phonegap index.html 页面是什么样的? 我编辑了添加 index.html 的问题 【参考方案1】:

按照一切的布局方式,您做的事情对自己来说有点困难。以下是一些有助于您修复代码的示例。

注意 data: 的布局方式。请注意成功的布局。

                $.ajax(
                type: "GET",
                url: "../ajax.php",
                dataType: "json",
                data: 
                    type: "getLineComments",
                    saleId: $(this).attr('saleId'),
                    lineId: $(this).attr('lineId')
                ,
                success: function (json) 
                    $content.empty();
                    $content.slideToggle(500, function () 
                    if(json.Row !== undefined && json.Row.length > 0)
                    
                        for(var i=0;i < json.Row.length;i++)
                        
                            var item = json.Row[i];
                            //console.log(item);
                            //console.log(item.REMARK_LIN);
                            $content.append("<li>" + item.REMARK_LIN + "</li>");
                        
                    

                    else
                    
                        if(json.Row !== undefined)
                            $content.append("<li>" + json.Row.REMARK_LIN + "</li>");
                        else
                            $content.append("<li>No Comments</li>");
                    

                    $header.text(function () 
                        //change text based on condition
                        return $content.is(":visible") ? "Collapse Line Remarks" : "Expand Line Remarks";
                    );
                );                 
                ,
                error: function(e)
                
                    console.log(e);
                
            );

还有一件事对你有很大帮助是使用 php 函数 json_encode - http://php.net/manual/en/function.json-encode.php

例如

echo json_encode(mysqli_fetch_array($result));

【讨论】:

非常感谢您的帮助!!最后我可以修复它。错误在查询中。我在 SELECT 中写入字段名称时出错。现在工作完美!! :)

以上是关于使用 Phonegap、AJAX、PHP 和 mySQL 登录不工作的主要内容,如果未能解决你的问题,请参考以下文章

在Phonegap项目中结合Ajax、Jquery、mysql、php不起作用

$.ajax() on phonegap

使用 Ajax / JQuery / PhoneGap 重定向

让 AJAX 在 PhoneGap 中工作

phonegap:基于 cookie 的身份验证 (PHP) 不起作用 [webview]

用 jQuery/AJAX 更新 MYSQL