jQuery json/jsonp 不获取 php 服务器上的项目

Posted

技术标签:

【中文标题】jQuery json/jsonp 不获取 php 服务器上的项目【英文标题】:jQuery json/jsonp does not fetch items on php server 【发布时间】:2014-08-29 18:52:28 【问题描述】:

我有一个用 php 编写的 Web 服务,但我无法使用 jquery getJSON() 获取数据。 这是我的网络服务,工作正常。

    <?php
include 'config.php';

$sql = "select s.id, s.title, s.content, s.date, s.confirm " . 
        "from sap s";

try 
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));  
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $dbh->query($sql);  
    $sapList = $stmt->fetchAll(PDO::FETCH_OBJ);
    $dbh = null;
    header('Content-Type: application/json; charset=UTF8');
    $data = array('items'=>$sapList);
    echo json_encode($data,JSON_UNESCAPED_UNICODE);
    //echo '"items":'. json_encode($sapList,JSON_UNESCAPED_UNICODE) .''; 

 catch(PDOException $e) 
    echo '"error":"text":'. $e->getMessage() .''; 



?>

我正在尝试开发一个 jQuery 移动应用程序。源代码:event.js 我在 event.js 中用于循环。因为我想从中提取数据多个独立的服务。

var db=openDatabase('servicesDB','1.0','servcesdatabase', 2*1024*1024);
tablo();
var olaylar;

$('#eventListPage').bind('pageinit', function(event) 
    console.log("geteventlist fonksiyon running");
    getEventList();
);

function getEventList() 
    db.transaction(function (tx) 
        tx.executeSql('SELECT * FROM services',[],function (tx,sonuc) 
            var toplam=sonuc.rows.length;

            var kayit="";
            var id="";
            var ad="";
            var url="";
            $('#olaylar li').remove();  
            for (var i=0;i < toplam; i++) 
                kayit=sonuc.rows.item(i);
                id=kayit.id;
                ad=kayit.ad;
                url=kayit.url;

                $.getJSON(url+'?callback=?', function(data) 
                    olaylar = data.items;
                    $.each(olaylar, function(index, olay) 
                        /*var confirm="";
                        switch(olay.confirm)
                        case 0:
                            confirm="accept";
                            break;
                        case 1:
                            confirm="wait";
                            break;
                        case 2:
                            confirm="reject";
                            break;
                        */
                        $('#olaylar').append(
                            '<li><a href="eventDetails.html?id=' + olay.id + '">' +
                            '<img src="pics/mr.jpg"/>' +
                            '<h4>' + olay.title + '</h4>' +
                            '<p>' + olay.confirm + '</p>' +
                            '</a></li>');
                    );

                    $('#olaylar').listview('refresh');
                    alert("getjsondan cikti");
                );
               
        , hata);
    );


function tablo()
    db.transaction(function (tx) 
        tx.executeSql('CREATE TABLE IF NOT EXISTS services('
                +'id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,'
                +'ad VARCHAR(25) NOT NULL, url VARCHAR(100) NOT NULL)');

    );


function hata(transaction, err)
    alert("Hata oldu : "+err.message);
    return false;

index.html

<!DOCTYPE HTML>
<html>
<head>
    <title>Personel Listesi</title>
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <link rel="stylesheet" href="css/styles.css" />
    <link rel="stylesheet" href="css/jquery.mobile-1.4.3.css" />
    <link rel="stylesheet" href="css/jquery.mobile-1.4.3.min.css" />
</head>
<body>
    <div id="eventListPage" data-role="page">

        <div data-role="header" data-position="fixed">
            <h1>Event List</h1>
        </div>

        <div data-role="content">
            <ul id="olaylar" data-role="listview" data-filter="true"></ul>
        </div>

    </div>

    <script src="js/jquery-2.1.1.min.js"></script>
    <script src="js/jquery.mobile-1.4.3.min.js"></script>
    <script src="js/events.js"></script>
    <script src="js/eventDetails.js"></script>
</body>
</html>

我试过$.getJSON(...) alert("in getjson"); 但这不起作用。这个alert.getjson 函数不起作用。但之前效果很好,现在getjson 函数返回空白,好像没有检索到任何数据。我需要你的帮助,谢谢!

【问题讨论】:

【参考方案1】:

我对@9​​87654322@ 毫无疑问。我不确定上面的代码框架是否正确。

更好的方法是在 PHP 关联数组本身中创建 JSON 结构,然后按如下方式生成 JSON,

<?php

// Some code
$data = array('item'=>$sapList);
echo json_encode($sapList);

?>

注意:由于我没有测试我的代码并且它是 GET 请求,您可以通过直接在浏览器地址栏中输入 URL 来测试您的代码。并在 chrome 的控制台中复制并粘贴打印的代码,并在 javascript 中验证它们。

使用在线 JSON 验证器,例如 http://jsonlint.com/

【讨论】:

感谢回复。但是我一直在php中使用这个web服务模板。从来没有任何冲突。无论如何我会尝试。你对JavaScript有一些疑问吗? chrome 的控制台出现错误。"Uncaught SyntaxError: Unexpected token : getsaplist.php:1 " getsaplist.php has above.I did as you said 我试过 jsonlint.com 并且我的 json 是有效的。没有问题。但在我的 jquery 上不起作用...

以上是关于jQuery json/jsonp 不获取 php 服务器上的项目的主要内容,如果未能解决你的问题,请参考以下文章

jquery ajax参数

JSON???JSONP ??????jQuery????????????share???

如何使用 XAMPP 本地服务器获取 JSON / JSONP 数据?

jsonp跨域访问servlet接口获取json数组,并且渲染数据,前后端完整

怎么解决跨域问题

在 Zepto 中指定 $.ajax JSONP 回调名称