AJAX请求不在cordova中工作?

时间:2016-09-19 12:16:50

标签: php android jquery ajax cordova

从我收集的内容中,与数据库的每个通信都应该通过cordova应用程序中的ajax请求。所以我设置了一个本地主机,建立了一个数据库,在那里的某处创建了我的php文件并开始设置cordova。我先在浏览器中开发它并设法让它继续运行,但现在每个ajax请求都没有运行。例如,这是我的login.html文件:

<head>
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <script type="text/javascript" src="js/jquery-2.2.4.min.js"></script>
  <script type="text/javascript" src="js/jquery.mobile-1.4.5.min.js"></script>
  <link rel="stylesheet" href="css/jquery.mobile-1.4.5.min.css" />
  <link rel="stylesheet" href="css/style.css" />

  <script type="text/javascript">
    $(document).ready(function() {
      $("#insert").click(function() {
        var username = $("#username").val();
        var password = $("#password").val();
        var dataString = "username=" + username + "&password=" + password;
        if ($.trim(username).length > 0 && $.trim(password).length > 0) {
          $.ajax({
            type: "POST",
            url: "http://localhost/jan/login.php",
            data: dataString,
            crossDomain: true,
            cache: false,
            success: function(data) {
              if (data == "success") {
                window.sessionStorage.setItem("loggedIn", 1);
                window.sessionStorage.setItem("username", username);
                window.location.replace("index.html");
              } else if (data == "error") {
                alert('error');
              }
            }
          });
        }
        return false;
      });
    });
  </script>
</head>

<body>
  <div data-role="page">
    <div data-role="header"><h1>Login</h1></div>
    <div data-role="content">
      <div class="list">
        <div class="item">
          <label>Username</label>
          <input type="text" id="username" value="" />
        </div>
        <div class="item">
          <label>Password</label>
          <input type="password" id="password" value="" />
        </div>
        <div class="item">
          <input type="button" id="insert" class="button button-block" value="Login" />
        </div>
      </div>  
    </div>
    <div data-role="footer" class="center">
      <a href="register.html">Register</a>
    </div> 
  </div>
</body>

</html>

这是login.php

<?php
    include 'db.php';

    $data=array();
    $q=mysqli_query($con,"select password from users where username=\"{$_POST['username']}\"");

    if(mysqli_num_rows($q) === 0)
        die('error'); 

    $row=mysqli_fetch_assoc($q);

    if($row['password'] == $_POST['password'])
        echo 'success';
?>

浏览器中的所有内容都按预期工作,但当我尝试使用Android Studio在Android模拟器中运行时,提交按钮不执行任何操作。但是,当我按下它时,它会按照它应该切换页面。所以我得出结论,这必须是因为错误的ajax实现或数据库设置。

P.S。是否需要将我的所有文件从www文件夹复制到platforms / android / assets / www以查看应用程序的更改?

P.P.S 在我看来,它必须是数据库问题,因为模拟器无法访问localhost。如果我想使用我的应用程序使用登录/注册用户来获得cordova应用程序,如何设置我的后端?我尝试从网络服务器运行这些php文件,但由于我的应用程序和我的数据库不在同一个域上运行,因此遇到了ajax的跨域问题。

1 个答案:

答案 0 :(得分:2)

使用计算机的IP地址而不是localhost。然后它就能正常工作。 无需复制这些文件。它将在您构建应用程序时自动复制。