ajax和json对象对php脚本

时间:2015-07-21 15:46:02

标签: javascript php jquery ajax json

我创建了一个带有固定json对象的简单html文件。我想把对象带到php文件text.php,编码,解码,在php文件中打印,然后将其打印回html文件。 html文件:

<!DOCTYPE html>
<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>
    <script>
        var key=45;
        var value=65;
        var rated = {"key" : key , "value" : value};
        var rated_encoded = JSON.stringify(rated);

        $.ajax({
            type: "POST",
            url: "text.php",
            dataType:"json",
            data: {
                "rated" : rated_encoded
            },
            //success: function(data) {
                //document.write(data);
            //}
        });
    </script>
    <script>
        $(document).ready(function(){
            $("button").click(function(){
                $("#div1").load("text.php");
            });
        });
    </script>
    <div id="div1"><h6>Result</h6></div>

    <button>Get External Content</button>

</body>
</html>

text.php代码:

<?php 
if(isset($_POST["rated"])){
    $rated_json = $_POST["rated"];
    $JSONArray  = json_decode($rated_json, true); 
    if($JSONArray !== null){ 
        $key = $JSONArray["key"];
        $value = $JSONArray["value"];
    }
    echo json_encode($rated_json);
} 
?>

echo json_encode($rated_json);

在text.php的最后一行不起作用。我不知道我们是否可以打印编码的东西或其他东西。代替那行,即使我键入echo&#34; hello&#34 ;;,它也不会在php文件中打印。如果有任何方法可以在text.php中打印$ JSONArray变量,那就太好了。如果我可以在html文件本身中编码json对象,发送到php脚本,在那里解码然后发回并在html文件中打印,那会更好。对不起,如果这个问题措辞不当或非常基本。另外,请慢慢解释一下代码。

1 个答案:

答案 0 :(得分:0)

您需要添加contentType:“application / json; charset = UTF-8”,

$.ajax({
            type: "POST",
            url: "text.php",
            dataType:"json", 
            contentType: "application/json; charset=UTF-8",
            data: {
                "rated" : rated_encoded
            },
            //success: function(data) {
                //document.write(data);
            //}
        });

dataType选项仅用于解析收到的数据。

如果仍然无效,请添加:processData:false