从PHP返回一个JSON字符串


Return a JSON string from PHP

我在本说明中附加的代码的目标是1) 收集表单中的数据。2) 张贴到PHP文件,在该文件中收集的信息被转换为JSON3) 将JSON信息写入文件``4) 返回当前的JSON并将其写入一个在HTML中称为Return的ID。

除第4步外,以上所有操作都有效,我似乎能找到错误。我希望有人能看一眼,告诉我我误入歧途的地方。。我知道我可以将JSON数据写入一个文件,然后将文件的全部内容读取到jsonReadArea。我还希望能够从PHP文件将当前JSON返回到jQuery成功函数并显示它。昨晚用调试器进一步调查,我似乎返回了一个对象,但该对象没有被正确访问。在HTML中,你会发现一个名为"返回"的文本,上面写着"成功时HTML被替换。在jQuerypost函数中,你可以看到成功和错误返回都试图写入。我不知道如何正确地在PHP文件中,如果成功,将JSON发送回jQuery post,如果不成功,将错误语句发送回"返回"DIV区域。javaScript jQuery:

$("#Jform").submit(function()){
    data = $('#Jform').serialize();
    $.ajax({
        type: "POST",
        dataType: "data",
        url: "processJson.php",
        data: data,
        success: function (msg) {
            displayRet(msg);
        },
        error: function (msg) {
            console.log(msg);
            $("#the-return").html(msg);
        }
    });
    return false;
});
//  load() functions
$('#jsonReadButton').click(function () {
    $('#jsonReadArea').load('storage/jsonStorage.txt');
});
function displayRet(inc) {
    $("#the-return").html(
        "Return String: Name: " + inc["name"] +
        "<br />Email: " + inc["email"] +
        "<br />Gender: " + inc["gender"] +
        "<br /Temperature: " + inc["temperature"] +
        "<br />terms " + inc["terms"] +
        "<br />JSON: " + inc["json"]
        );
alert("Form submitted successfully.'nReturned json: " + inc);
}

现在的PHP代码:

<?php
/*
* PHP Filters
* http://www.w3schools.com/php/php_filter.asp
*
*/
$error = FALSE;
$name = filter_input(INPUT_POST, "name", FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, "email", FILTER_VALIDATE_EMAIL);
$gender = filter_input(INPUT_POST, "gender", FILTER_SANITIZE_STRING);
$temperature = filter_input(INPUT_POST, "temperature", FILTER_SANITIZE_STRING);
$terms = filter_input(INPUT_POST, "terms", FILTER_SANITIZE_STRING);
$tempArray = array("name" => $name, "email" => $email, "gender" => $gender, "temperature" => $temperature, "terms" => $terms);
$jsonVal = json_encode($tempArray);
// Open file and test operation
$fileHandle = fopen('storage/jsonStorage.txt', "a");
if (!$fileHandle) {
    $error = TRUE;
} else {
    fwrite($fileHandle, $jsonVal);
    fwrite($fileHandle, "<br />'n");
}
if ($error === FALSE) {
    return $jsonVal;
} else {
    return "An error occured";
}

您将返回值(因为您不在函数中,所以不返回任何值),而不是print将其返回到输出流。

您还忘记将Content-Type标头从默认的text/html:更改为

header("Content-Type: application/json");

您需要做的是一个简单的回声,如下所示:

echo$jsonVal;

然后在javascript端,您可以使用函数json.parse

来获得这个json