为啥这个 Dojo 代码不与它的 PHP 文件通信?
Posted
技术标签:
【中文标题】为啥这个 Dojo 代码不与它的 PHP 文件通信?【英文标题】:Why is this Dojo code not communicating with its' PHP file?为什么这个 Dojo 代码不与它的 PHP 文件通信? 【发布时间】:2012-04-01 14:20:13 【问题描述】:在 Firebug(使用 Firephp 插件)中,我注意到与 PHP 文件没有通信,因此没有任何反应...这是 javascript:
// three parameters are required by Dojo!
function buildMenu(type, data, evt)
var menuDOM = document.getElementById("colorselect");
var nextColor, nextItem;
// delete previous items in the color menu
menuDOM.options.length = null;
// split the data into an array of colors
var colors = data.split(', ');
// go through the returned array of colors
for(var i = 0; i < colors.length; index++)
nextColor = colors[i];
nextItem = new Option(nextColor);
/* add the new item to the menu
("null" for IE5, "-1" for all other browsers) */
try
menuDOM.add(nextItem, -1);
catch(e)
menuDOM.add(nextItem, null);
// end of function buildMenu
// the function that calls bind to request data
function getColors(size)
dojo.io.bind( url: "shirtColors.php" + "?size=" + size,
load: buildMenu,
method: "GET",
mimetype: "text/plain"
);
<br /><br />
这里是 PHP:
<?php
$shirtSize = $_GET["size"];
// array for available colors (for each shirt size)
$colors = array("large" => "black, yellow, green",
"medium" => "blue, purple, white, off-white, cream, bleached-white",
"small" => "orange, red, aqua, turqoise, aquamarine, light-blue");
echo $colors[$shirtSize];
?><br /><br />
...这里是html:(Dojo在这里链接到网上,Dojo io库是导入的)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Shirt Colors</title>
<!-- link to dojo online -->
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.7.2/dojo/dojo.js"></script>
<!-- javascript file -->
<script type = "text/javascript" src = "shirtColors.js"></script>
<!-- import the dojo io library -->
<script type = "text/javascript">
dojo.require("dojo.io.*");
</script>
</head>
<body>
<select onchange = "getColors(this.value);">
<option value = "large">
large shirt
</option>
<option value = "medium">
medium shirt
</option>
<option value = "small">
small shirt
</option>
</select>
<select id = "colorselect"></select>
</body>
</html>
【问题讨论】:
【参考方案1】:dojo.io.bind 是一个非常古老的函数。
为您的用例提供支持的新方法是使用 dojo.xhrGet 或 dojo.xhrPost
var deferred = dojo.xhrGet(
url: "shirtColors.php",
content:
'size': size
,
handleAs: "text",
load: buildMenu,
error: function(error)
//error handling code
);
请注意,查询参数作为“内容”传递。
修改你的 buildMenu 函数:
function buildMenu (data)
//data contains the text string for the data returned by PHP
详情请见http://dojotoolkit.org/reference-guide/1.7/dojo/xhrGet.html
【讨论】:
啊,谢谢你的帮助,现在可以了!除了 -- only 正在菜单中设置从 PHP 文件回显的字符串的第一部分(before 第一个逗号)(例如:justblack
for "black, orange, grey"
)。我可能有错字,还是我错误地应用了 Dojo?
很可能剩余的数据不在响应文本中。您可以通过单击此请求的 firebug Net 选项卡中的 Response 选项卡来检查 Response。或在浏览器中单独尝试此 URL。如果仍然存在问题,我建议以 JSON 格式返回数据,因为它比纯文本更具结构化。【参考方案2】:
并更改这些文件的位置。如果 shirtolors 依赖于 dojo.io,它将不会被加载。
<!-- import the dojo io library -->
<script type = "text/javascript">
dojo.require("dojo.io.*");
</script>
<!-- javascript file -->
<script type = "text/javascript" src = "shirtColors.js"></script>
【讨论】:
以上是关于为啥这个 Dojo 代码不与它的 PHP 文件通信?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Jsp 文件不与 Spring Boot 中的控制器返回视图映射