首先,我正在学习如何使用jQuery/JavaScript进行编程,并在使用JSON.parse()时遇到了问题。我理解它的格式和为什么人们使用它......但是我无法在任何代码项目中使它起作用。
我已经在书籍/在线上阅读了关于如何使用它的内容,但是我认为我阅读得太多了。我现在感到困惑并开始对我所知道的产生怀疑。
话虽如此,我的jQuery/JavaScript课程要求我通过使用MAMP/本地主机作为服务器来通过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)'返回的一部分确实包括了方程式miles/gallons的答案,但我不知道如何从JSON中提取它。
方程式miles/gallons的解决方法出现在'msg'输出中。
谢谢。
编辑附加2 这个问题已经解决了!在stackoverflow上寻找之前编辑部分问题的解决方法时,我在这里找到了答案:JavaScript中解析JSON响应以获取键/值对。
答案是:在要求mpg值的//TODO部分下,我放置了以下代码- $("#mpg").val(result.message); - 它说在变量result的JSON部分中,取标记为“message”的JSON部分,其值为等式的解决方案。
感谢所有对我的问题提供解决方案的人。我感谢快速的响应、伟大的建议和理解JSON的信息。
-ECP03
JSON.parse("result");
会发生什么? - user663031