json import分解但来自同一服务器源

时间:2014-01-13 02:49:23

标签: javascript php jquery ajax json

我正在探索将ajax同步json导入到我的javascript代码中。

我想要使用的JSON源链接是

  

http://www.nusantech.com/hendak/default.php?m=galaksi&galaksi=1&viewID=1&t=json

但为了减少服务器负载,一周前左右我在

创建了一个显示相同数据的静态页面
  

http://www.nusantech.com/hendak/noobjson.php

我的javascript导入如下:

<head>
    <title>Nusantech</title>
    <script src="\OpenLayers213\OpenLayers.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
var jsonData = {};
        $.ajax({
            url: "http://hendak.seribudaya.com/noobjson.php",
            async: false,
            dataType: 'json',
            success: function(data) {
                jsonData = data;
            }
    });
alert("Galaksi value retrieved from JSON (expected: 1) : "+jsonData.galaksi);
</script>

    <script type="text/javascript">
        function kemasMaklumat(id,content) {
            var container = document.getElementById(id);
            container.innerHTML = content;
        }
    </script>
</head>

从那里我在jsonData上检索我想要的值,例如,(x,y)坐标为

(jsonData.planets[7].coordinates[0].x,jsonData.planets[7].coordinates[0].y)

使用noobjson.php链接可以正常工作,但是当我将其指向default.php时,什么也没有出现。该页面需要一段时间才能加载,这使得它似乎加载了json值,但alert("Galaksi value retrieved")返回undefined

我复制&amp;将default.php页面的输出粘贴到Web上的JSON验证程序中,显示OK。我不知道为什么静态链接有效但基于$_GET的链接不起作用。

有人可以告诉我发生了什么吗?

修改

我试过了:

<script type="text/javascript">
    var jsonData = {};
    $.ajax({
//          url: "http://hendak.seribudaya.com/noobjson.php",
            url:  "http://hendak.seribudaya.com/default.php?"+encodeURIComponent("galaksi=1&viewID=1&m=galaksi&t=json"),
//          url:  "http://hendak.seribudaya.com/default.php?galaksi=1&viewID=1&m=galaksi&t=json",
            async: false,
            dataType: 'json',
            type: 'GET',
            contentType: "application/json",
            success: function(data) {
                jsonData = JSON.parse(JSON.stringify(eval("("+data+")")));
                alert("Success");
                },
            error: function(data) {
                alert("Failed to download info." + data);
                }
        });
    </SCRIPT>
enter code here

除非我使用noobjson网址,否则我总是无法下载信息。

就好像那个带有GET的URL不存在。

2 个答案:

答案 0 :(得分:0)

您必须在发送请求之前对URL组件进行编码。尝试:

$.ajax({
        url: "http://www.nusantech.com/hendak/default.php?" + encodeURIComponent('m=galaksi&galaksi=1&viewID=1&t=json'),
        async: false,
        dataType: 'json',
        success: function(data) {
            jsonData = data;
        }
});

参考:encodeURIComponent()

答案 1 :(得分:0)

我已经解决了。

在default.php中,我所做的是:

if ($_GET["t"]=="json") {
    $viewID=$_GET["viewID"];
    $galaksi=$_GET["galaksi"];
    $con=mysqli_connect($server, $user, $password, $database); 
    $sql="SELECT Hari FROM berita WHERE Galaksi=".$galaksi;
    $hari=1;
    $result = mysqli_query($con,$sql); while(($row = mysqli_fetch_array($result)) ){$hari=$row['Hari']; } 
    $lb="";
    if ($_GET["t"]!="json") { echo "<PRE>\n"; $lb="\n"; }
    echo "{\"galaksi\": ".$galaksi.",";
    echo $lb."\"hari\": ".$hari.",";
    echo $lb."\"planets\": [";
    //etc
    //etc
}

所以我用$ JSONstr替换了所有单独的回声,如下所示。

if ($_GET["t"]=="json") {
    $viewID=$_GET["viewID"];
    $galaksi=$_GET["galaksi"];
    $con=mysqli_connect($server, $user, $password, $database); 
    $sql="SELECT Hari FROM berita WHERE Galaksi=".$galaksi;
    $hari=1;
    $result = mysqli_query($con,$sql); while(($row = mysqli_fetch_array($result)) ){$hari=$row['Hari']; } 
    $lb="";
    $JSONstr="";
//  if ($_GET["t"]!="json") { $JSONstr="<PRE>\n"; $lb="\n"; }
    $JSONstr=$JSONstr."{\"galaksi\": ".$galaksi.",";
    $JSONstr=$JSONstr.$lb."\"hari\": ".$hari.",";
    $JSONstr=$JSONstr.$lb."\"planets\": [";
    //etc
    //etc
    //and at the end:
        echo $JSONstr;
}

然后我添加了echo $ JSONstr;在末尾。最初我这样做是为了让我能做到:

 echo json_encode($JSONstr); 

但是这会在JSON输出处创建{\“Galaksi \”:1}而不是预期的{“Galaksi”:1}

所以我删除了json_encode并输出了字符串。 我还得删掉

if ($_GET["t"]!="json"){ $JSONstr="<PRE>\n"; $lb="\n"; }

这次我也使用了不同的JSON测试器。

最初我使用http://www.freeformatter.com/json-validator.html表示JSON对我的初始JSON输出有效。然后我使用了这个,它说我的JSON输出url无效,但是如果我复制+粘贴它返回的输出字符串有效。 http://jsonformatter.curiousconcept.com/

因此,在进行这些更改并删除"<PRE>"之后,curiousconcept验证程序为我提供了有效状态。

然后我在javascript中使用了这个,现在我能够检索预期值。

谢谢大家,希望这也有助于其他人。