0

我正在尝试使用 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 CALL:

$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));
}
4

3 回答 3

0

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

JSON

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

JSONP

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

更改dataTypejson并删除jsonp密钥。

编辑:您也错误地循环了data对象。你应该循环通过data.items.

于 2013-07-22T19:10:09.813 回答
0

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

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

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

只有在像 PhoneGap 这样的容器中运行 JavaScript 时,这才会成为问题。在 Chrome 等 Android 浏览器中运行不会有问题。原因是PhoneGap 将域更改为localhost。

于 2013-07-22T19:14:22.003 回答
0

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

<?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) . ');';
?>

我所做的其他一切都是正确的。工作正常。谢谢大家。

于 2013-07-23T14:16:19.520 回答