我的代码有啥问题(使用 dojo xhrGet Ajax)
Posted
技术标签:
【中文标题】我的代码有啥问题(使用 dojo xhrGet Ajax)【英文标题】:What is wrong with my code (using dojo xhrGet Ajax)我的代码有什么问题(使用 dojo xhrGet Ajax) 【发布时间】:2011-09-26 23:42:56 【问题描述】:我正在尝试使用此代码来调用 php 文件、访问数据库、检索值并使用 JSON 对象返回它们,然后将它们编辑到文本框中。
javascript 结束代码:
当用户更改下拉列表中的选项时,应用程序应调用 PHP 脚本从数据库中获取新值,从 JSON 对象中检索它们,并修改文本区域以显示新值。
<select id="busSelect" name="busSelect">
<option>S053-HS - P</option>
<option>S059-HS - P</option>
<option>S064-HS - P</option>
<option>S069-HS - P</option>
<option>S070-HS - P</option>
</select>
<textarea id="memo"></textarea>
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/dojo/dojo.xd.js" type="text/javascript"></script>
<script type ="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type ="text/javascript">
<?php
?>
dojo.ready(function()
var myOptions =
zoom: 12,
center: new google.maps.LatLng(26.4615832697227,-80.07325172424316),
mapTypeId: google.maps.MapTypeId.ROADMAP
;
var map = new google.maps.Map(dojo.byId("map_canvas"),
myOptions);
dojo.connect(busSelect,"onchange",function()
dojo.xhrGet(
url: "getRoute.php",
handleAs: "json",
timeout: 1000,
content:
route: dojo.byId("busSelect").value
,
load: function(result)
var formResult = result.lat_json + " " + result.long_json + " " + result.name_json;
dojo.byId(memo).value = formResult;
);
);
PHP 脚本:
应该取它从 JS 应用程序接收到的名称,即“总线名称”,并使用该名称查找总线 ID。然后它应该使用该 ID 访问公共汽车站(这一切正常,我只是弄错了 JSON/AJAX 位)
<?php
header('Content-type: application/json');
require_once 'database.php';
mysql_connect($server, $user, $pw);
mysql_select_db("busapp") or die(mysql_error());
$route = $_GET["route"];
$result_id = mysql_query("SELECT * FROM routes WHERE name = $route");
$result_row = mysql_fetch_array($result_id);
$route_id = $row['id'];
$result = mysql_query("SELECT * FROM stops_routes WHERE route_id = $route_id")
or die(mysql_error());
$markers;
$stopid = array();
$time = array();
$lat;
$long;
$name;
$waypts = array();
for ($x = 0; $row = mysql_fetch_array($result); $x++)
$stopid[$x] = $row['stop_id'];
$time[$x] = $row['time'];
for ($x = 0; $x < sizeof($stopid); $x++)
$result = mysql_query("SELECT * FROM stops WHERE id = $stopid[$x]")
or die(mysql_error());
$row = mysql_fetch_array($result)
or die(mysql_error());
$lat[$x] = $row['lat'];
$long[$x] = $row['long'];
$name[$x] = $row['name'];
$size = count($stopid);
$lat_json = json_encode($lat);
$long_json = json_encode($long);
$name_json = json_encode($name);
?>
我在 dojo.xd.js:14 运行时也遇到错误。
【问题讨论】:
【参考方案1】:您应该创建一个对象,然后将其编码为 JSON,然后简单地用正确的 Content-type
标头回显 JSON,而不是传递给 json_encode()
的单个变量。
// Start with an associative array
$arr = array("lat_json" => $lat, "long_json" => $long, "name_json" => $name);
// Cast it to an Object of stdClass
$obj = (object)$arr;
// Encode it
$json = json_encode($obj);
// And return it to the calling AJAX by just echoing out the JSON
header("Content-type: application/json");
echo $json;
exit();
在编码 JSON 之前,您的对象现在看起来像(使用我的示例数据):
stdClass Object
(
[lat_json] => 12345
[long_json] => 45678
[name_json] => the name
)
// After json_encode()
"lat":12345,"long":45678,"name":"the name"
由于您已经在接收端设置了 javascript,我相信它应该无需修改即可工作。要确定 javascript 端的 JSON 结构,请务必检查 console.dir(result)
内的 load()
函数。
【讨论】:
以上是关于我的代码有啥问题(使用 dojo xhrGet Ajax)的主要内容,如果未能解决你的问题,请参考以下文章