【问题标题】:Json / Jsonp not connecting to php (Phonegap + jquerymobile)Json / Jsonp 未连接到 php (Phonegap + jquerymobile)
【发布时间】:2012-07-09 17:13:30
【问题描述】:

我正在尝试制作 -

  • android WEB 应用程序
  • 带电话间隙
  • 使用 JqueryMobile 进行布局

我在做什么 -

  • 以 ID、姓名和地址为输入的 html 表单
  • '使用 ajax 序列化此数据
  • 用它制作一个 json 对象
  • 应将其发送到名为“connection.php”的文件中
  • 在哪里,这些数据被放入数据库(MySql)

其他细节 -

  • 我的服务器是 localhost,我用的是 xampp
  • 我已经使用 phpmyadmin 创建了数据库和表

问题-

  • 我的 json 对象在其中创建的 html 文件未连接到我的 localhost 托管的 php 文件

这是我的完整 html 文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 

<!-- Change this if you want to allow scaling --> 
   <meta name="viewport" content="width=default-width; user-scalable=no" /> 
   <meta http-equiv="Content-type" content="text/html;charset=utf-8"> 

   <title>Trial app</title>
   <link rel="stylesheet" href="thestylesheet.css" type="text/css">
    <script type="text/javascript" charset="utf-8" src="javascript1.js"></script>
    <script type="text/javascript" charset="utf-8" src="javascript2.js"></script>
    <script type="text/javascript" charset="utf-8" src="cordova-1.8.0.js"></script>

    <script>
    $(document).ready(function () {
        $("#btn").click( function() {
        alert('hello hello');

        $.ajax({
            url: "connection.php",
            type: "POST",
            data: {
                id: $('#id').val(),
                name: $('#name').val(),
                Address: $('#Address').val()
            },
            datatype: "json",
            success: function (status)
            {
                if (status.success == false)
                {
                    alert("Failure!");
                }
                else 
                {
                    alert("Success!");
                }
            }
        });

    });
    });
</script> 
</head> 

<body> 

<div data-role="header">
        <h1>Heading of the app</h1>
    </div><!-- /header -->
<div data-role="content">
    <form id="target" method="post">
        <label for="id">
            <input type="text" id="id" placeholder="ID">
        </label>

        <label for="name">
            <input type="text" id="name" placeholder="Name">
        </label>

        <label for="Address">
            <input type="text" id="Address" placeholder="Address">
        </label>
<div id="btn" data-role="button" data-icon="star" data-theme="e">Add record</div>
        <!--<input type="submit" value="Add record" data-icon="star" data-theme="e">
        -->
    </form>

</div>
</body> 
</html>

这是我的本地主机托管的“connection.php”

  <?php header('Content-type: application/json');

$server = "localhost";

$username = "root";

$password = "";

$database = "jqueryex";

$con = mysql_connect($server, $username, $password);
if($con) { echo "Connected to database!"; }
else { echo "Could not connect!"; }
//or die ("Could not connect: " . mysql_error());

mysql_select_db($database, $con);

/*
 CREATE TABLE `sample` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `Address` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

*/
    $id= json_decode($_POST['id']);

$name = json_decode($_POST['name']);

$Address = json_decode($_POST['Address']);

    $sql = "INSERT INTO sample (id, name, Address) ";
    $sql .= "VALUES ($id, '$name', '$Address')";
    if (!mysql_query($sql, $con)) {
        die('Error: ' . mysql_error());
    } else {
        echo "Comment added";
    }
    mysql_close($con);
?>

我的疑惑:

  • 当我在 phpmyadmin 中查看表“样本”时,未在表中创建任何条目
  • 很明显,我也没有看到任何成功消息
  • 我没有收到任何错误,不是来自 ajax,也不是来自 php 文件。

我怀疑的东西:

  • 我应该使用 jsonp 而不是 json 吗?我是新手。
  • 我的 php 文件有问题吗?
  • 也许我需要在我的 html 文件中包含更多的 javascript 文件?

我认为这是一个非常简单的问题,所以请帮助我!我认为这只是一些概念上的错误,因为我刚刚开始使用 jquery、ajax 和 json。 谢谢。

一些编辑:

我收到以下语法错误:

已连接到数据库!
注意:未定义索引:C:\xampp\htdocs\connection.php 中的 id 在第 28行>

通知:未定义索引:C:\xampp\htdocs\connection.php 中的名称在第 31

注意:未定义索引:地址在 C:\xampp\htdocs\connection.php34
错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''', '')' 附近使用正确的语法

所以我将代码更改为

if (isset($_POST['id']))
$id= json_decode($_POST['id']);

if (isset($_POST['name']))
$name = json_decode($_POST['name']);

if (isset($_POST['Address']))
$Address = json_decode($_POST['Address']);

仍然遇到同样的错误

请帮忙!

【问题讨论】:

  • 尝试一个完整的URL而不是connection.php,看到你的JS不是从服务器传递的。
  • 网址是什么?我的意思是文件“connection.php”由我的本地主机托管。它在我的电脑上一个名为“htdocs”的文件夹中(我使用xampp)。那么网址应该是什么?
  • 假设您在同一台计算机上运行 PhoneGap,请尝试 localhost/connection.php 基本上是一个 FQDN
  • 已连接数据库!
    注意:未定义索引:C:\xampp\htdocs\connection.php中的id 在线27

    注意:未定义索引:C:\xampp\htdocs\connection.php 中的名称 行>29

    注意:未定义索引:地址在C:\xampp\htdocs\connection.php 31
    错误:你的SQL语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''', '')' 附近使用正确的语法
  • 按照我的回答,请在继续之前删除语法错误。

标签: json jquery web-applications cordova


【解决方案1】:

由于您使用的是 android,所以直接 connection.php 将无法正常工作,这是完成此操作的一般方法:

http://www.mobitechie.com/android-2/how-to-access-localhost-on-android-over-wifi/

在上面的链接中设置好之后,您将获得的网络地址将类似于 10.0.0.2 然后将您的服务器更改为http://10.0.0.2/connection.php 其中connection.php 放置在htdocs 目录中。

以上步骤是必要的,因为 android 将 localhost 视为自己的设备 localhost,并且不会直接选择系统的 localhost。

在此答案下进一步评论,询问您是否还有更多问题。

【讨论】:

  • 谢谢先生。处理完语法问题后,我会立即与您联系,但我仍然遇到困难。 :(谢谢。
【解决方案2】:

您可以在 Phonegap 中将 JSONP 用于 ajax 请求。但为此,您必须使用 JSONP 对服务器页面使用跨域请求。这里你必须使用回调方法。

请浏览我的帖子$.ajax() on phonegap

还有一件事,不要从 android 向 localhost 发出请求。只需将您的文件放入网络服务器并尝试发出请求。

【讨论】:

    【解决方案3】:

    请更改此脚本:

    $sql = "INSERT INTO sample (id, name, Address) ";
    $sql .= "VALUES ($id, '$name', '$Address')";
    

    收件人:

    $sql = "INSERT INTO sample (id, name, Address) ";
    $sql .= "VALUES ('$id', '$name', '$Address')";
    

    在 $id 周围添加字符 '

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多