Javascript json导入中断,但来自同一服务器源
我正在探索ajax同步json导入到我的javascript代码中 我想使用的JSON源链接是 但为了降低服务器负载,大约一周前,我创建了一个静态页面,在服务器上显示相同的数据 我的javascript导入如下所示:Javascript json导入中断,但来自同一服务器源,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,我正在探索ajax同步json导入到我的javascript代码中 我想使用的JSON源链接是 但为了降低服务器负载,大约一周前,我创建了一个静态页面,在服务器上显示相同的数据 我的javascript导入如下所示: <head> <title>Nusantech</title> <script src="\OpenLayers213\OpenLayers.js"></script> <script type="t
<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>
它在noobjson.php链接上运行良好,但当我将其指向default.php时,什么也看不到。加载页面花了一段时间,这使它看起来像是加载了json值,但检索到的alertGalaksi值返回未定义的值
我将default.php页面的输出复制粘贴到web上的JSON验证器上,结果显示OK。我不知道为什么静态链接有效,但是基于$的链接无效
有人能告诉我发生了什么事吗
编辑
我试过:
<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 URL,否则我总是无法下载信息
就好像带有GET的URL不存在一样。在发送请求之前,必须对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;
}
});
参考资料:我已经解决了它
在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
}
但这会在JSON输出处创建{\Galaksi\:1},而不是预期的{Galaksi:1}
所以我删除了json_编码,只输出字符串。
我还得把它移走
if ($_GET["t"]!="json"){ $JSONstr="<PRE>\n"; $lb="\n"; }
这次我还使用了不同的JSON测试仪
最初我使用的是表示JSON对于我的初始JSON输出是有效的。然后我使用了这个,它说我的JSON输出url无效,尽管如果我复制并粘贴输出字符串,它返回的是有效的
所以在做了这些更改并删除了之后,curiousconcept验证器给了我一个有效的状态
然后我在javascript中使用了它,现在我能够检索期望值
谢谢大家,希望这对其他人也有帮助。旁注:在JS路径中使用/而不是反斜杠您可以通过比较两个URL的服务器响应来开始调试。我将反斜杠更改为/\n我仍然无法使其工作。我已经检查了两个URL的响应,我想不出来。我在上使用在线JSON验证器检查了的输出,它返回:JSON输入在JavaScript中有效。根据RFC4627 JSON规范,JSON输入是有效的。我不明白它为什么会出现问题。另外,我复制了default.php URL的输出并将其粘贴到一个新的空文件中,并且能够从这个新文件导入JSON详细信息。似乎我只能从静态文件导入JSON,而不能从动态生成的文件导入JSON。这正常吗?好奇:在进行AJAX调用之前,您是否使用GET参数对URL进行了编码?这仍然不起作用。就好像那个URL根本不存在一样。请查看对原始问题的其他编辑。
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 json_encode($JSONstr);
if ($_GET["t"]!="json"){ $JSONstr="<PRE>\n"; $lb="\n"; }