【问题标题】:Getting a json from a server and assigning it to a variable从服务器获取 json 并将其分配给变量
【发布时间】:2015-08-24 16:47:18
【问题描述】:

我是 Javascript 新手,但不是编程新手。我正在尝试编写一个与服务器交换信息的程序。我无法让它工作,甚至简化和借用其他人的代码也无济于事。我做错了什么?

这里是客户端:

<!DOCTYPE html>
<html>

<head>
    <title>Testing</title>
</head>

<body>
    <script>
        GET_JSON = function(callback) {
            var req = new XMLHttpRequest();
            req.open(POST, "http://www.skutan.com/cgi-bin/hvserver.cgi", true);
            req.onreadystatechange = function() {
                if (this.readyState == 4) {
                    callback(JSON.parse(req.responseText));
                }
            }
            req.send("a=2&b=1");
        }

        JSONCallback = function(JSONObj) {
            alert(JSONObj);
        };
    </script>

    <button type="button" onclick="GET_JSON(JSONCallback)">Test</button>

    <h1>.</h1>
    <span id="koord"></span>
</body>

</html>

服务器是用 perl 编写的,看起来像这样:

#!/usr/bin/perl -wT                                                             
use strict;
use CGI qw(:standard);

my @fields = param;

my $json_ut = "{\"a\": 1, \"b\": 2}";

print("Content-type: application/json; charset=utf-8\n\n");

print("$json_ut");

为什么我在客户端没有收到任何警报?

【问题讨论】:

  • 你必须解释问题是什么。 “我无法让它工作” 不是问题描述。请求是否已发送?服务器是否返回响应?是否调用了onreadystatechange 回调?你能解析响应吗?是否调用了回调?您必须自己进行一些调试。
  • 非常感谢您的回答。我现在看到我从未检查过请求是否已发送。 /var/log/httpd/access_log 中没有提到服务器文件,所以我猜该请求从未发送过。为什么会这样?
  • @user3397176 -- 弹出控制台(在大多数浏览器上为 F12)- 单击按钮时查找错误。此外,控制台的“网络”选项卡会显示网络请求,请验证您的请求是否正在发送。
  • HTML 页面是否位于http://www.skutan.com/?如果没有,它可能会作为跨站点请求被阻止。
  • 谢谢 tymeJV。我必须了解有关控制台的更多信息。

标签: javascript ajax json perl


【解决方案1】:

如果您检查了浏览器的控制台,您会看到如下错误

ReferenceError: POST is not defined

引用行

req.open(POST, "http://www.skutan.com/cgi-bin/hvserver.cgi", true);

应该是

req.open("POST", "http://www.skutan.com/cgi-bin/hvserver.cgi", true);

【讨论】:

  • 谢谢。在您建议的修改之后,它确实有效。
猜你喜欢
  • 2018-08-22
  • 2019-05-24
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
相关资源
最近更新 更多