当前位置: 首页 > 知识库问答 >
问题:

检索JSON。来自服务器的parse()字符串

姬选
2023-03-14

首先,我要说的是,我正在学习如何使用jquery/javascript编程,并且在使用JSON时遇到了一个问题。parse()。我了解格式,以及人们为什么使用它。。。但是在我的任何代码项目中都无法使用它。

我在书上/网上读过关于如何使用它的内容,但我觉得我读得太多了。我现在很困惑,并且在猜测我对它的了解。

话虽如此,我正在学习的jquery/javascript类要求我通过AJAX使用MAMP/localhost作为服务器,将其用于分配任务。

下面的两个代码用于我需要填写//TODO信息的部分。一个是javascript(客户端),另一个是php(服务器端)。我认为我已经正确地设置了其他//TODO信息,但是JSON部分不断出现令牌错误。

我在这里寻找解决办法,但我想我还是把自己弄糊涂了,需要帮助。感谢任何反馈、见解或信息。

-Javascript-

var calculateMpg = function () {
    // These lines are commented out since the server will perform these checks
    // if (!checkNumber("miles") || !checkNumber("gallons")) {
        // return;
    // }
    var miles = $("#miles").val();
    var gallons = $("#gallons").val();
    console.log("ajax request issued.");
    var result;
    $.ajax({
        url: "service.php?action=calculateMPG&miles="+miles+"&gallons="+gallons, 
        cache: false,
        dataType: "text",
        success: function(msg) {
            console.log("ajax response received.");
        //  TODO: parse the JSON string returned from the server (see JSON.parse())
        JSON.parse("result");
        if (result.status === 'success') {
        //  TODO: get the mpg value returned from the server and display it to the user.
            $("#mpg").val($_GET("result"));
            console.log("JSON Working!");
        }
        else {
            // TODO: get the name of the variable with the error. Hint: look at the 'fail' result from service.php 
            $_GET[fail(id)];
            // TODO: report the error to the user using invalidNumber() function.
            alert("{status: 'failure', variable: <variable name>}");
        }
    }
});
};

$(document).ready( function () {
    $("#miles").blur(function () {
        checkNumber("miles");
    });
    $("#gallons").blur(function() {
        checkNumber("gallons");
    });
    $("#calculate").click(calculateMpg);
    $("#miles").focus();
});

-PHP-

<?php
if ($_GET) {
    if ($_GET['action'] == 'calculateMPG') {
        $miles = htmlspecialchars($_GET['miles']);
        $gallons = htmlspecialchars($_GET['gallons']);
        // validate miles
        if (strlen($miles) == 0) {
            fail("miles");
        }
        $miles_chars = str_split($miles);
        for ($i=0; $i< count($miles_chars); $i++) {
            if ($miles_chars[$i] < "0" || $miles_chars[$i] > "9") {
                //error_log("miles_chars check failed at: " + $i);
                fail("miles");
            }
        }
        // validate gallons
        if (strlen($gallons) == 0) {
            fail("gallons");
        }
        $gallons_chars = str_split($gallons);
        for ($i=0; $i< count($gallons_chars); $i++) {
            if ($gallons_chars[$i] < "0" || $gallons_chars[$i] > "9") {
                fail("gallons");
            }
        }
        // validate $miles and $gallons calling $fail along the way
        $result = $miles/$gallons;
        if ($result) {
            success($result);
        } else {
            fail("mpg");
        }
        exit ;
    }
 }

function fail($variable) {
    die(json_encode(array('status' => 'fail', 'variable' => $variable)));
}

function success($message) {
    die(json_encode(array('status' => 'success', 'message' => $message)));
}

编辑附加1我已经对关于“var result”的JSON信息进行了更改(感谢这里的一些回复)。我开始更好地理解JSON了。

我(现在)遇到的另一个问题是如何将JSON消息的一部分与正在传输的整个消息隔离开来?

返回的JSON. parse(msg)的一部分DOES包含等式英里/加仑的答案,但是我不知道如何...从JSON中提取它。

方程式英里/加仑的解出现在“msg”输出中。

谢谢。

编辑附加2这个问题已经解决了!在我之前编辑的部分中,我仔细研究了stackoverflow,寻找这个问题的解决方案,我在这里找到了我的答案:在Javascript中解析JSON响应以获得键/值对。

答案是这样的:在//TODO部分询问mpg值,我将下面的代码-$(“#mpg”)。val(result.message);-也就是说,在变量result的JSON部分中,取JSON中标记为“message”的部分,该值为方程解。

感谢所有对我的问题提出解决方案的人。我非常感谢您的快速响应、出色的建议和理解JSON的信息。

-ECP03

共有3个答案

丁雅逸
2023-03-14

jQuery已经为您提供了一个方便的函数来解析JSON,而不是自己解析JSON:

var path = "service.php?action=calculateMPG&miles="+miles+"&gallons="+gallons;
$.getJSON(path, function (data) {
  if (data.status == 'success') {
    console.log('Success! Message:', data.message);
  } else {
    console.log('Failed :( Variable:', data.variable);
  }
});

对于原始代码,您需要做的是调用JSON。在success回调中解析(msg),该回调将返回一个JavaScript对象,其中包含从PHP脚本发送的值。通过在$中指定数据类型:“json。ajaxcall,jQuery会为您做这件事。$。getJSON方法为您完成这项工作和其他一些事情。

轩辕欣可
2023-03-14

您有两个选择:

选项1:--解析返回的字符串

更改JSON。解析(“结果”) 至:

var result = JSON.parse( msg );

选项2:-请求JSON而不是纯文本-不需要解析

使用$。getJSON()是以下内容的简写:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

冯阳云
2023-03-14

JSON. parse()要求向其发送一个有效的JSON字符串。

“result”不是有效的JSON字符串。在success函数中,您定义了一个参数msg-它包含什么?尝试控制台。在success函数的开头记录(msg),并查看控制台输出。

 类似资料:
  • 下面尝试过,但是直到并且除非我使Acyah geShipmentIn绑定节点为空(删除释放ID="9.2"xmlns="http://schema.infor.com/InforOAGIS/2"xmlns: xs="http://www.w3.org/2001/XMLSchema")选择查询不获取值。

  • 我正在绑定使用RSA加密字符串密码。但我使用的函数是生成SecKey数据类型的公钥,这不是我需要的,因为我从服务器响应中获取的公钥是字符串。我使用了许多库,但也使用了相同的库,生成了公钥SecKey。 这个类显示了我想要更改函数func encryptBase64(text:String,SecKey:SecKey)->String{的意思,使其与func encryptBase64(text:S

  • 问题内容: 尝试将json字符串解析为android时,会传递HTML值。一天前一切正常,突然间,尝试通过php文件获取数据库时,我的应用突然崩溃了。 当我检查注意到html值时。请参阅logcat 我在byethost服务器上托管的所有页面都发生了这种情况,而在其他服务器上托管的页面运行良好。我尝试将我的文件之一移动到其他服务器,并在该文件上返回正确的json字符串。 另外,当我在浏览器中检查u

  • 我有一个嵌套的JSON语句,我需要将其转换为触发数据框。这个JSON语句存在于数据框列中。我一直在尝试使用“from_json”和“get_json_object”解析数据框列中的语句,但无法读取数据。这是我一直试图阅读的源数据的最小片段: 我需要提取嵌套的cript值。我使用下面的代码来清理数据并将其读入数据框 每次运行上述代码时,我都会得到一个空数据框。请帮忙。 尝试了以下内容,但没有成功:P

  • 我们最近将一些数据移植到MongoDB,现在正在考虑运行日常备份,最好是从cron作业,并将其中一个备份恢复到辅助mongo数据库。 我们的系统设置如下: 服务器1:开发mongo数据库 服务器2:两个mongo数据库,一个用于暂存数据,一个用于生产 服务器3:是我们运行所有cron作业/批处理脚本的地方 (我尝试了将用户名和密码连接到主机,但没有将用户名和密码连接到主机) 我收到以下信息: Mo

  • 我在想,为什么像谷歌Chrome/Firebug/Fiddler这样的网络检查员在使用WebSockets/channel-API这样的推送技术时无法跟踪消息(或者有没有办法做到这一点?)这是因为我们正在从HTTP升级连接吗?