我正在探索将ajax同步json导入到我的javascript代码中。
我想要使用的JSON源链接是
http://www.nusantech.com/hendak/default.php?m=galaksi&galaksi=1&viewID=1&t=json
但为了减少服务器负载,一周前左右我在
创建了一个显示相同数据的静态页面我的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不存在。
答案 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;
}
});
答案 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中使用了这个,现在我能够检索预期值。
谢谢大家,希望这也有助于其他人。