2010-05-09 106 views
3

我不能为我的生活弄清楚我做错了什么。它似乎应该很简单,因为我找不到这个问题的任何其他人,但我不知道通过JavaScript(jQuery)发送基本数据到PHP并解码它。为了简便起见,这就是我:发送JSON(jQuery)到PHP并解码它

JAVASCRIPT

var json_data = { "name" : "john doe" }; 

$.ajax({ 
    type: "POST", 
    url: "../bin/process.php", 
    dataType: "json", 
    data: json_data 
    }); 

和我的PHP文件

$arr = json_decode("json_data", true); 

$fp = fopen('data.txt', "w"); 
fwrite($fp, $arr['name']); 
fclose($fp); 

我正在写的文件,在没有结束它。如果我做的:

fwrite($fp, 'test'); 

我得到的文件在它的单词测试,但无论我做什么,我不明白我发送的JSON数据。

有人可以分享A到Z的一个完整的例子。感谢您的任何帮助。

回答

5

您使用jQuery制作的ajax请求将发送参数'name',值为'john doe',而不是整个对象。如果您想发送整个对象,你必须通过这样的:

data: { parameters: json_data } 

在PHP端,您可以从$ _POST全局变量。使用你的榜样,你可以使用:

$name = $_POST['name']; 

或者,如果你发送的整个对象,用我的例子:

$params = $_POST['parameters']; 

没有必要使用json_decode(),因为你拉的参数从$ _POST数组中出来的将是本地PHP变量。

你只需要使用它,如果你有一个json字符串,你想把它变成一个PHP变量,这不是这里的情况,因为jQuery会将javascript对象“转换”为查询字符串的背景。

这是你需要从JavaScript的JSON形式发送数据的,而是一种罕见的情况下,如果你想要做的,你需要的东西,如:

// JS 

var person = "{ name: 'John Doe' }"; // notice the double quotes here, this is a string, and not an object 
$.ajax({ 
    type: "POST", 
    url: "../bin/process.php", 
    dataType: "json", 
    data: { json: person } 
    }); 

// PHP 

$json = $_POST['json']; // $json is a string 
$person = json_decode($json); // $person is an array with a key 'name' 
+0

谢谢,我想你已经很好地回答了我的问题,并为我澄清了很多地狱。你能举一个JSON编码的例子,以及如何在Javascript中编码某些东西并用PHP解码它?如果你能帮助我,请给我检查你的答案是否正确。 – dscher 2010-05-09 22:01:36

+0

包含一个示例。 – 2010-05-09 22:29:38

+0

谢谢,你太棒了。 – dscher 2010-05-09 22:47:57

1

的jQuery不能将数据编码到JSON,只有解码它(名字dataType实际上指的是响应的类型)。使用json2.js进行编码。