【问题标题】:web page does not recognize a function网页无法识别功能
【发布时间】:2019-08-01 07:33:27
【问题描述】:

这是一个很奇怪的问题。

我有一个接受姓名/地址信息的网页。我想在输入的状态和输入的邮政编码之间进行交叉检查。我在这个站点上找到了一个 JS 脚本,它将从邮政编码返回状态:How can I quickly determine the State for a given zipcode? 我不会复制它,因为它很长。此代码没有报告问题。

因为它是 JS,所以我将该代码复制/粘贴到一个名为 zipstate.js 的文件中,并在我的脚本部分(位于 html 页面的末尾)中添加了以下行

<script src=”zipstate.js”></script>

我在这里调用该函数:

//cross check the zip to the state in case of typos 
    $zip1 = strval($zip);    //make sure it's a string – could use (string) but same results
    $state1 = getState($zip1); //this is where the error occurs
    if ($state != $state1 ) {  //never get here because of the error – and I don’t care about strict matching
            $error_message .= 'The ZIP code does not belong to the entered state.<br/>';
       }

当点击那段代码时,我得到一个错误: 致命错误:未捕获的错误:调用 [path] 中未定义的函数 getState() 堆栈跟踪:#0 {main} 在第 256 行的 [path] 中抛出

这是该函数调用的位置。

我确保函数的名称与我调用的名称相匹配。我移动了那个脚本定义,把它放在section中,把它放在顶部附近,实际上将代码嵌入到主文件中,将其定义为:

<script>
 [copied code]
</script> 

那没用。我将它从脚本中取出并作为 php.ini 内联。不——这引发了其他错误。

我比较了这个文件的格式和工作的 JS 脚本,我没有发现任何明显的缺陷。

我定义了其他 JS 和 PHP 函数,它们可以像宣传的那样工作。

奇怪的是,当我打开开发者面板时,我在控制台下没有看到任何错误,在源下我看到了文件,并且扫描源,我没有看到任何错误。奇怪。

我在这个网站上搜索过类似的错误,但它们似乎都与贬值的函数有关,或者使用 MYSQL 调用而不是 MYSQLi。该脚本使用关键字“typeof”,我认为它没有被贬值或删除。

那么,朋友们,我做错了什么?我错过了什么?

这是一个有趣但耗时的副项目,而且我遇到的许多问题都通过在社区中四处游荡而得到解决。我学到了很多东西。这一次,我不在我的联盟中,虽然这可能有一个非常简单的解决方案,但它超出了我的范围。我在这方面花了太多时间,我想我可以使用一些帮助。

感谢您的回复。

【问题讨论】:

  • &lt;script src=”zipstate.js”&gt;&lt;/script&gt; 尽量避免在编程中使用大引号,它们会破坏很多东西。
  • 您是否尝试从 PHP 调用该函数?因为从 PHP 调用 JS 函数是行不通的。
  • @CertainPerformance - 大引号是我用来创建 OP 的文字处理程序的产物。我使用 HTML-KIT 编写 webcode,所以那里真的没有花引号。
  • @Chipster - 我认为你一针见血!是的,这正是我正在做的。这是即时学习而不是参加课程的问题(而且,在我很高的年龄,这样做真的没有意义)。该例程很容易转换为 PHP 函数 - 使用“is_string”而不是“typeof”并使所有内部变量符合 PHP 要求。非常感谢!
  • 您应该确保您发布的代码完全代表您实际拥有的代码,否则您很可能会得到无用的反馈。

标签: javascript


【解决方案1】:

那是因为您试图从 PHP 调用 Javascript 函数。你不能那样做。两者相互独立,相互独立。

一般来说,PHP 可以像这样影响 Javascript:

var somevar = <?php echo $myvar; ?>;

注意:这可能被认为是非标准的。这只是一个例子。

但是您不能从 PHP 调用 Javascript 函数。两者相互独立。

解决方案: 解决方案很简单,将Javascript函数移植到PHP。这说起来容易做起来难,但这看起来并不难做到:

<?php // because we are in PHP, of course
function getState($zipcode) {

    // Ensure param is a string to prevent unpredictable parsing results
    if (is_string($zipcode)) {
        // It really depends on how you wish to log this. You could echo, or
        // return something, throw an exception even. For now I'v just commented it out
        // console.log('Must pass the zipcode as a string.');
        return;
    }

    // Ensure you don't parse codes that start with 0 as octal values
    $thiszip = (int)$zipcode; 

    // Code blocks alphabetized by state
    if ($thiszip >= 35000 && $thiszip <= 36999) {
        $thisst = 'AL';
        $thisstate = "Alabama";
        }
    else if ($thiszip >= 99500 && $thiszip <= 99999) {
        $thisst = 'AK';
        $thisstate = "Alaska";
        }
    else if ($thiszip >= 85000 && $thiszip <= 86999) {
        $thisst = 'AZ';
        $thisstate = "Arizona";
        }
    else if ($thiszip >= 71600 && $thiszip <= 72999) {
        $thisst = 'AR';
        $thisstate = "Arkansas";
        }
    else if ($thiszip >= 90000 && $thiszip <= 96699) {
        $thisst = 'CA';
        $thisstate = "California";
        }
    else if ($thiszip >= 80000 && $thiszip <= 81999) {
        $thisst = 'CO';
        $thisstate = "Colorado";
        }
    else if ($thiszip >= 6000 && $thiszip <= 6999) {
        $thisst = 'CT';
        $thisstate = "Connecticut";
        }
    else if ($thiszip >= 19700 && $thiszip <= 19999) {
        $thisst = 'DE';
        $thisstate = "Deleware";
        }
    else if ($thiszip >= 32000 && $thiszip <= 34999) {
        $thisst = 'FL';
        $thisstate = "Florida";
        }
    else if ($thiszip >= 30000 && $thiszip <= 31999) {
        $thisst = 'GA';
        $thisstate = "Georgia";
        }
    else if ($thiszip >= 96700 && $thiszip <= 96999) {
        $thisst = 'HI';
        $thisstate = "Hawaii";
        }
    else if ($thiszip >= 83200 && $thiszip <= 83999) {
        $thisst = 'ID';
        $thisstate = "Idaho";
        }
    else if ($thiszip >= 60000 && $thiszip <= 62999) {
        $thisst = 'IL';
        $thisstate = "Illinois";
        }
    else if ($thiszip >= 46000 && $thiszip <= 47999) {
        $thisst = 'IN';
        $thisstate = "Indiana";
        }
    else if ($thiszip >= 50000 && $thiszip <= 52999) {
        $thisst = 'IA';
        $thisstate = "Iowa";
        }
    else if ($thiszip >= 66000 && $thiszip <= 67999) {
        $thisst = 'KS';
        $thisstate = "Kansas";
        }
    else if ($thiszip >= 40000 && $thiszip <= 42999) {
        $thisst = 'KY';
        $thisstate = "Kentucky";
        }
    else if ($thiszip >= 70000 && $thiszip <= 71599) {
        $thisst = 'LA';
        $thisstate = "Louisiana";
        }
    else if ($thiszip >= 3900 && $thiszip <= 4999) {
        $thisst = 'ME';
        $thisstate = "Maine";
        }
    else if ($thiszip >= 20600 && $thiszip <= 21999) {
        $thisst = 'MD';
        $thisstate = "Maryland";
        }
    else if ($thiszip >= 1000 && $thiszip <= 2799) {
        $thisst = 'MA';
        $thisstate = "Massachusetts";
        }
    else if ($thiszip >= 48000 && $thiszip <= 49999) {
        $thisst = 'MI';
        $thisstate = "Michigan";
        }
    else if ($thiszip >= 55000 && $thiszip <= 56999) {
        $thisst = 'MN';
        $thisstate = "Minnesota";
        }
    else if ($thiszip >= 38600 && $thiszip <= 39999) {
        $thisst = 'MS';
        $thisstate = "Mississippi";
        }
    else if ($thiszip >= 63000 && $thiszip <= 65999) {
        $thisst = 'MO';
        $thisstate = "Missouri";
        }
    else if ($thiszip >= 59000 && $thiszip <= 59999) {
        $thisst = 'MT';
        $thisstate = "Montana";
        }
    else if ($thiszip >= 27000 && $thiszip <= 28999) {
        $thisst = 'NC';
        $thisstate = "North Carolina";
        }
    else if ($thiszip >= 58000 && $thiszip <= 58999) {
        $thisst = 'ND';
        $thisstate = "North Dakota";
        }
    else if ($thiszip >= 68000 && $thiszip <= 69999) {
        $thisst = 'NE';
        $thisstate = "Nebraska";
        }
    else if ($thiszip >= 88900 && $thiszip <= 89999) {
        $thisst = 'NV';
        $thisstate = "Nevada";
        }
    else if ($thiszip >= 3000 && $thiszip <= 3899) {
        $thisst = 'NH';
        $thisstate = "New Hampshire";
        }
    else if ($thiszip >= 7000 && $thiszip <= 8999) {
        $thisst = 'NJ';
        $thisstate = "New Jersey";
        }
    else if ($thiszip >= 87000 && $thiszip <= 88499) {
        $thisst = 'NM';
        $thisstate = "New Mexico";
        }
    else if ($thiszip >= 10000 && $thiszip <= 14999) {
        $thisst = 'NY';
        $thisstate = "New York";
        }
    else if ($thiszip >= 43000 && $thiszip <= 45999) {
        $thisst = 'OH';
        $thisstate = "Ohio";
        }
    else if ($thiszip >= 73000 && $thiszip <= 74999) {
        $thisst = 'OK';
        $thisstate = "Oklahoma";
        }
    else if ($thiszip >= 97000 && $thiszip <= 97999) {
        $thisst = 'OR';
        $thisstate = "Oregon";
        }
    else if ($thiszip >= 15000 && $thiszip <= 19699) {
        $thisst = 'PA';
        $thisstate = "Pennsylvania";
        }
    else if ($thiszip >= 300 && $thiszip <= 999) {
        $thisst = 'PR';
        $thisstate = "Puerto Rico";
        }
    else if ($thiszip >= 2800 && $thiszip <= 2999) {
        $thisst = 'RI';
        $thisstate = "Rhode Island";
        }
    else if ($thiszip >= 29000 && $thiszip <= 29999) {
        $thisst = 'SC';
        $thisstate = "South Carolina";
        }
    else if ($thiszip >= 57000 && $thiszip <= 57999) {
        $thisst = 'SD';
        $thisstate = "South Dakota";
        }
    else if ($thiszip >= 37000 && $thiszip <= 38599) {
        $thisst = 'TN';
        $thisstate = "Tennessee";
        }
    else if ( ($thiszip >= 75000 && $thiszip <= 79999) || ($thiszip >= 88500 && $thiszip <= 88599) ) {
        $thisst = 'TX';
        $thisstate = "Texas";
        }
    else if ($thiszip >= 84000 && $thiszip <= 84999) {
        $thisst = 'UT';
        $thisstate = "Utah";
        }
    else if ($thiszip >= 5000 && $thiszip <= 5999) {
        $thisst = 'VT';
        $thisstate = "Vermont";
        }
    else if ($thiszip >= 22000 && $thiszip <= 24699) {
        $thisst = 'VA';
        $thisstate = "Virgina";
        }
    else if ($thiszip >= 20000 && $thiszip <= 20599) {
        $thisst = 'DC';
        $thisstate = "Washington DC";
        }
    else if ($thiszip >= 98000 && $thiszip <= 99499) {
        $thisst = 'WA';
        $thisstate = "Washington";
        }
    else if ($thiszip >= 24700 && $thiszip <= 26999) {
        $thisst = 'WV';
        $thisstate = "West Virginia";
        }
    else if ($thiszip >= 53000 && $thiszip <= 54999) {
        $thisst = 'WI';
        $thisstate = "Wisconsin";
        }
    else if ($thiszip >= 82000 && $thiszip <= 83199) {
        $thisst = 'WY';
        $thisstate = "Wyoming";
        }
    else {
        $thisst = 'none';
    }
   return $thisst;
}
?>

这应该可以解决您的问题。

【讨论】:

  • 这正是我修改例程的方式。一旦我意识到我的方式错误(感谢您的洞察力),不到五分钟就可以让例行程序运行起来。我真的很感谢你回答没有任何问题。
猜你喜欢
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 2021-01-22
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多