javascript - 从服务器检索 JSON.parse() 字符串

标签 javascript php jquery json

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

我已在此处的书籍/在线阅读如何使用它,但我认为我读得太多了。我现在很困惑,并且在猜测我对它的了解。

话虽如此,我正在参加的 jquery/javascript 类(class)要求我通过使用 MAMP/localhost 作为服务器的 AJAX 将其用于作业。

下面两段代码是我需要填写//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)”中的一部分确实包含等式英里/加仑的答案,但我不知道如何...从 JSON 中提取它。

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

谢谢。

编辑了另外 2 个 这个问题已经解决了!在仔细阅读 stackoverflow 以解决我之前编辑的部分中的问题时,我在这里找到了答案:JSON response parsing in Javascript to get key/value pair .

答案是这样的:在请求 mpg 值的//TODO 部分下,我放置了以下代码 - $("#mpg").val(result.message); - 它表示在变量结果的 JSON 部分中,取标记为“消息”的 JSON 部分,值为方程解。

感谢所有为我的问题提供解决方案的人。我感谢快速响应、很好的建议以及理解 JSON 的信息。

-ECP03

最佳答案

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

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

关于javascript - 从服务器检索 JSON.parse() 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30171382/

相关文章:

php - 具有多重连接、子查询和半径的高级 mysql 查询

php - 这段代码中定义的表单的 `submit()` 函数在哪里?

javascript - jquery 可以做到这一点?值的弹出窗口

javascript - JQuery在线面试(15分钟)TestDome

javascript - VIES 增值税号验证

javascript - Jest 测试上下文/监视在函数外部创建的模拟变量(类级别)

javascript - 在 "store"的上下文中找不到 "Connect(MyComponent)"吗? Redux-React 问题

javascript - 如何在 Flask 上提供页面时在浏览器上上传图像预览?

php - PHP 中的 URL 调用

javascript - xml 不是一个函数