为啥这个 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 第一个逗号)(例如:just black 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 中的控制器返回视图映射

为啥这个基本菜单列表偏离中心并且与它下面的文本不对齐?

为啥 Mocha 不与 Yarn Berry 合作?

为啥dojo会发出这个错误?未捕获的类型错误:对象 [对象对象] 没有方法“查询”

node.js与它的文件系统模块

为啥 html 元素中的 Html 文本不与 Thyme-leaf 文本连接?代码是[重复]