JavaScript,PHP和MySQL之间的通信

时间:2016-05-24 18:14:36

标签: javascript php mysql json cordova

我正在尝试学习JavaScript以编写Cordova代码。 我阅读了很多教程,但没有一个能帮助我解决这个问题。

我的cordova应用程序非常简单。只是一个文本框和2个按钮。两个Buttons都在我的服务器上调用PHP脚本。一个按钮将数据发送到PHP脚本以在MySQL数据库中插入文本字段的值,第二个按钮调用相同的脚本,并应将数据库的值写入我的cordova应用程序。

这是我的

<?PHP
$response = array();

require_once __DIR__ . '/db_config.php';

$db_link = mysqli_connect (
                 DB_SERVER, 
                 DB_USER, 
                 DB_PASSWORD, 
                 DB_DATABASE
                );
mysqli_set_charset($db_link, 'utf8');
if (!$db_link)
{
    die ('keine Verbindung '.mysqli_error());
}

if(isset($_POST['action']) && $_POST['action'] == 'insert'){
    $name = $_POST['name'];
    $sql = "INSERT INTO test.testTable (name) VALUES ('$name')";
    $db_erg = mysqli_query($db_link, $sql);
    if (!$db_erg){
        echo "error";
    }else{
        echo "ok";
    }
}

if(isset($_POST['action']) && $_POST['action']=='read'){
    $sql = "SELECT * FROM testTable";

    $db_erg = mysqli_query( $db_link, $sql );
    if (!$db_erg )
    {
        $response["success"] = 0;
        $response["message"] = "Oops!";
        echo json_encode($response);
        die('Ungültige Abfrage: ' . mysqli_error());
    }

    while ($zeile = mysqli_fetch_array( $db_erg, MYSQL_ASSOC))
    {
        //$response["success"] = $zeile['pid'];
        //$response["message"] = $zeile['name'];
        $response[]=$zeile;
    }
    echo json_encode($response);
    mysqli_free_result( $db_erg );
}
?>

这是我在cordova应用程序中的两个函数:

function getNameFromServer() {
    var url = "appcon.php";
    var action = 'read';
    $.getJSON(url, function (returnedData) {
        $.each(returnedData, function (key, value) {
            var id = value.pid;
            var name = value.name;
            $("#listview").append("<li>" + id + " - " + name) + "</li>";
        });
    });            
}

function sendNameToServer() {
    console.log("sendNameToServer aufgerufen");
    var url2send = "appcon.php";
    var name = $("#Name").val()
    var dataString = name;
    console.log(dataString);
    if ($.trim(name).length>0) {
        $.ajax({
            type: "POST",
            url: url2send,
            data: { action: 'insert', name: dataString },
            crossDomain: true,
            cache: false,
            beforeSend: function () {
                console.log("sendNameToServer beforeSend wurde aufgerufen");
            },
            success: function (data) {
                if (data == "ok") {
                    alert("Daten eingefuegt");
                }
                if (data == "error") {
                    alert("Da ging was schief");
                }
            }
        });
    }        
}

我的问题/问题:

  1. sendNameToServer功能在这种情况下有效,数据将插入我的数据库中。但我从来没有得到警报(成功:从未打过电话)。

  2. 如何将"action = read"传递给getNameFromServer()函数中的PHP脚本?

  3. 第三个问题是有点偏离主题,但是这种代码艺术“保存”还是操作cordova应用程序和服务器之间的数据很简单?什么是更好的方式或如何加密传输?

1 个答案:

答案 0 :(得分:0)

以下是您问题的一部分答案。

$.getJSON有第二个可选参数data,它可以是您要传递给脚本的信息对象。

function getNameFromServer() {
    $.getJSON("appcon.php", { action: 'read' }, function (returnedData) {
        $.each(returnedData, function (key, value) {
            var id = value.pid;
            var name = value.name;
            $("#listview").append("<li>" + id + " - " + name) + "</li>";
        });
    });            
}

修改:由于您使用的是$.getJSON(),因此请求方法为GET,这意味着您必须在第三个{{1}中使用$_GET你的PHP脚本中的语句。

if