0

我想这与正常情况相反。我希望将 PHP 中的数据作为带有 JSON 的字符串接收,并且希望 jQuery 对数据进行编码。

目前 PHP 会自动将数据解码为数组。

PHP 5.3.10(托管)。

<?php
if( isset( $_REQUEST['arr']))
{
    $arr = $_REQUEST['arr'];
    $obj = $_REQUEST['obj'];   
    $res = "arr is of type ".gettype( $arr).", var_export (".var_export( $arr, true).")\n" 
         . "obj is of type ".gettype( $obj).", var_export (".var_export( $obj, true).")\n";  
    die( json_encode( $res ));
    exit;
} 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>test</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" ></script>
<script>

$(document).ready(function(){
    $("#csubmit").click( function() {
        var arr = new Array("one","two");
        var obj = { "one":1, "two":2 };
        var data ={ "arr" :arr, "obj" : obj };
        $.ajax({
            type: "POST",
            cache: false,
            data: data,
            dataType : "json",
                complete : function( jqXHR, textStatus ) {
                    if( textStatus != 'success' )
                        alert("Network error ("+textStatus+"/"+jqXHR.responseText+")");
                }
        }).done( function( data ) {
            alert("Got back:("+data+")");
        });
        return false;
    });
});

</script>
</head>
<body>
<form><input type="submit" value="click" id="csubmit"></form>
</body>
</html>

结果总是

Got back:(arr is of type array, var_export (array (
  0 => 'one',
  1 => 'two',
))
obj is of type array, var_export (array (
  'one' => '1',
  'two' => '2',
))
)

即使我希望它是一些字符串。

4

3 回答 3

1

您可以在将 JavaScript 对象发送到服务器之前将其编码为 JSON。然后您必须手动解码 json 以将其用作数组。在您的 ajax 方法中执行以下操作。

   data : JSON.stringify(data),

编辑:

较新的浏览器原生支持 JSON 对象。对于那些不支持它的人,您仍然可以通过包含来自http://json.org的 json2.js 来实现该功能。

有关 JSON 的更多信息,请访问https://developer.mozilla.org/En/Using_native_JSON

于 2012-04-26T13:26:38.630 回答
1

在 AJAX 请求中省略dataType: 'json',将数据编码为 jQuery 中的 JSON 并将其传递给 PHP。

那应该行得通。

于 2012-04-26T13:28:03.263 回答
1

当您接受返回 JSON 时,您正在发送正常的表单编码数据 ( application/x-www-form-urlencoded):

arr%5B%5D=one&arr%5B%5D=two&obj%5Bone%5D=1&obj%5Btwo%5D=2

又名

arr[]=one&arr[]=two&obj[one]=1&obj[two]=2

您可以通过执行从 PHP 确认这一点

$raw_input = file_get_contents("php://input");
echo urldecode($raw_input);

正如其他人所指出的,除非您在 JavaScript 中显式转换,否则您不会发送{"arr":["one","two"],"obj":{"one":1,"two":2}}

于 2012-04-26T13:42:43.807 回答