![](/img/trans.png)
[英]Trying to do JSON.parse but it doesnt like what i am doing with a returned string from my server
[英]Retrieving a JSON.parse() string from a server
我將首先說我正在學習如何使用jquery / javascript進行編程,並且使用JSON.parse()遇到問題。 我理解格式,以及人們使用它的原因......但是我無法在任何代碼項目中使用它。
我已經在這里閱讀了書籍/網上如何使用它,但我想我讀了太多。 我現在很困惑,第二次猜測我對它的了解。
話雖如此,我正在使用的jquery / javascript類要求我使用它來進行分配,通過使用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)'返回的DOES包括方程里程/加侖的答案,但我不知道如何...從JSON中提取它。
等式里程/加侖的解決方案出現在'msg'輸出中。
謝謝。
已編輯補充2此問題已解決! 雖然在我之前編輯的部分中圍繞stackoverflow來解決問題的解決方案,但我在這里找到了答案: JSON響應在Javascript中解析以獲得鍵/值對 。
答案是這樣的:在// TODO部分詢問mpg值,我輸入以下代碼 - $(“#mpg”)。val(result.message); - 表示在變量結果的JSON部分中,取JSON標記為“message”的部分,該值為等式解。
感謝所有回答我們問題解決方案的人。 我很欣賞快速響應,很棒的建議以及理解JSON的信息。
-ECP03
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);
}
});
對於原始代碼,您需要做的是在success
回調中調用JSON.parse(msg)
,這將返回一個JavaScript對象,其中包含您從PHP腳本發送的值。 通過在$.ajax
調用中指定dataType: 'json'
,jQuery為您完成此操作。 $.getJSON
方法為您執行此操作以及其他一些操作。
JSON.parse()
要求您向其發送有效的JSON字符串。
"result"
不是有效的JSON字符串。 在您的success
函數中,您已經定義了一個參數msg
- 它包含什么? 在成功函數的開頭嘗試console.log(msg)
並查看控制台輸出。
您有兩種選擇:
選項1: - 解析返回的字符串。
改變JSON.parse("result");
至:
var result = JSON.parse( msg );
選項2: - 請求JSON而不是純文本 - 無需解析
使用$ .getJSON()這是以下的簡寫:
$.ajax({
dataType: "json",
url: url,
data: data,
success: success
});
您需要使用success函數返回的結果:
var result = JSON.parse(msg);
然后,你可以做像result.status
這樣的東西。
當您放置JSON.parse("result")
您說“解析字符串'結果',”這沒有任何意義。 但是,如果你說JSON.parse(msg)
你說的是“解析從ajax動作返回的變量”,這是有道理的。
JSON.parse()
用於將您的json數據轉換為對象,然后您可以輕松地操作它。 JSON.parse(msg);
而不是JSON.parse("result")
。 例如:
var json = '{"value1": "img", "value2":"img2"}'
var obj = JSON.parse(json);
for ( k in obj ) {
console.log(obj[k])
}
這是完全錯誤的: JSON.parse("result");
。 .parse()需要一個JSON字符串,例如從你的ajax請求返回的字符串。 你沒有提供那個字符串。 你提供了result
這個詞,它不是有效的JSON。
JSON本質上是賦值表達式的右側.eg
var foo = 'bar';
^^^^^---this is json
var baz = 42;
^^---also json
var qux = ['a', 'b', 'c'];
^^^^^^^^^^^^^^^---even more json
var x = 1+2;
^^^---**NOT** json... it's an expression.
你在做什么基本上是:
var x = parse;
^^^^^^---unknown/undefined variable: not JSON, it's an expression
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.