使用AJAX获得带有JS的android应用程序的PHP结果

getting a PHP result to android app with JS using AJAX

本文关键字:android 应用程序 PHP 结果 JS AJAX 使用      更新时间:2023-09-26

我正试图使用jQuery在服务器上用PHP调用填充网格。我要么在网格上一无所获,要么收到一条错误消息。

Conexion JS:

$(document).ready(function(){
    var output = $('#output');
    $.ajax({
        url: 'conexresumenu.php',
        dataType: 'jsonp',
        jsonp: 'jsoncallback',
        timeout: 30000,
        success: function(data, status){
            $.each(data, function(i,item){ 
                var landmark ='<div class="ui-block-a ui-bar-c" style="width:50px">'+item.id+'</div><div class="ui-block-b ui-bar-c" style="width:80px">'+item.username+'</div><div class="ui-block-c ui-bar-c" style="width:80px">'+item.join_date+'</div><div class="ui-block-d ui-bar-c" style="width:50px">'+item.is_active+'</div>';
                output.append(landmark);
            });
        },
        error: function(){
            output.text('Hubo un error al cargar los datos');
        }
    });
});

现在HTML文件获取这个脚本:

<!DOCTYPE html> 
<html>
<head>
<meta charset="UTF-8">
<title>Manager</title>
<link href="cssmain.css" rel="stylesheet" type="text/css"/>
<script src="jquery-1.5.min.js" type="text/javascript"></script>
<script src="jquery.mobile-1.0a3.min.js" type="text/javascript"></script>
<!-- Esta referencia a phonegap.js permitirá disponer de sugerencias para el código, siempre y cuando el sitio actual se haya configurado como aplicación móvil. 
     Para configurar el sitio como aplicación móvil, vaya a Sitio -> Aplicaciones móviles -> Configurar framework de aplicación... -->
<script src="/phonegap.js" type="text/javascript"></script>
<script src="js/resumenu.js"></script>
</head> 
<body> 
<div data-role="page" id="page">
    <div data-role="header">
        Users
    </div>
    <div data-role="content">   
        <h3> Usuarios </h3><div id='output' class=ui-grid-c>
      <div class="ui-block-a ui-bar-c" style="width:50px">ID</div>
      <div class="ui-block-b ui-bar-c" style="width:80px">Username</div>
      <div class="ui-block-c ui-bar-c" style="width:80px">Alta</div>    
      <div class="ui-block-d ui-bar-c" style="width:50px">Status</div>
    </div>

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

现在服务器上的PHP调用:

$con = mysql_connect($server, $username, $password) or die ("Could not connect: " . mysql_error());
mysql_select_db($database, $con);

 $query = mysql_query("SELECT id, username, join_date, is_active FROM members", $con) or trigger_error(mysql_error());

//create an output array
$output = array();
//if the MySQL query returned any results
if (mysql_affected_rows() > 0) {

    //iterate through the results of your query
    while ($row = mysql_fetch_assoc($query)) {
        //add the results of your query to the output variable
        $output[] = $row;
    }

    //send your output to the browser encoded in the JSON format
    echo json_encode(array('status' => 'success', 'items' => $output));
} else {
    //if no records were found in the database then output an error message encoded in the JSON format
    echo json_encode(array('status' => 'success', 'items' => $output));
}

您正在请求数据类型为jsonp。这是错误的,因为您正在输出常规的json。(jsonp是封装在函数调用中的JSON)。

JSON:

{ my: [json], goes: "here"] }

JSONP

jsonpCallback({ my: [json], goes: "here"] });

dataType更改为json并移除jsonp密钥。

编辑:您也错误地循环使用data对象。您应该循环使用data.items

在Android的HTML5容器中运行JavaScript时。域是应用程序的域,而不是web服务器的域。

告诉web服务器允许对其他域进行JSON响应。将以下内容添加到PHP代码的顶部。

header('Access-Control-Allow-Origin: *');

只有当您在PhoneGap这样的容器中运行JavaScript时,这才是一个问题。在像Chrome这样的Android浏览器中运行不会成为问题。原因是PhoneGap更改了域,使其成为localhost。

我已经解决了这个问题。谢谢大家。真正的问题是服务器端的响应。不太好。

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

$server = "localhost";
$username = "user";
$password = "pass";
$database = "db";
$con = mysql_connect($server, $username, $password) or die ("Could not connect: " . mysql_error());
mysql_select_db($database, $con);

 $query = mysql_query("SELECT id, username, join_date, is_active FROM members", $con) or trigger_error(mysql_error());

//create an output array
$records = array();
while($row = mysql_fetch_assoc($query)) {
    $records[] = $row;
}
mysql_close($con);
echo $_GET['jsoncallback'] . '(' . json_encode($records) . ');';
?>

我所做的一切都是正确的。工作良好。谢谢大家。