2013-05-26 80 views
0

好了,所以我只是路过挣扎与JSON的jquery我ajax的简单的Ajax使用JSON

var values = {"name":$("#folderName").val(),"dir":directory}; 
var valstring = JSON.stringify(values); 
var user = {json:valstring}; 
$.ajax({ 
    url: "makeFolder.php",  
    data:user, 
    cache: false, 
    contentType: false, 
    processData: false, 
    type: "POST", 
    success: function(n) { 
     alert(n); 
     window.location.href=window.location.href; 
    } 
}); 

然后在我的PHP

$json = $_REQUEST['json']; 
$json = stripslashes($json); 
$jsonobj = json_decode($json); 
echo $jsonobj->name; 

意味着这应该不应该吗?我可能做一些非常愚蠢的地方,但是我很dumbfouded 它输出HTML标签,而不是回声,当我采取的方式都在我的PHP它的工作原理100%

+0

即使你们给我以不同的方式保存我的变量并在php中访问它们,只需要让它起作用 – jambuls

+0

在PHP中不使用'$ _REQUEST'是个好主意,而是使用'$ _GET'或'$ _POST'。 – 2013-05-26 15:28:51

+0

是啊,对不起,这是origanlly $ _POST它只是我试图修复它的一个变化 – jambuls

回答

1

我没有足够的信息来真的知道自己在做什么的问题是,但鉴于现有的资料,我怀疑这一行:

contentType: false 

...根据jQuery.ajax documentationcontentType参数应该是String类型的,所以我不认为false是一个可接受的值。

特别是因为您还指定processData: false

例如,看看这个的jsfiddle:http://jsfiddle.net/6JkZk/使用像萤火虫,你可以看到,AJAX请求的身体只包含此:

[object Object] 

服务器未收到您的json数据在所有。如果删除processData: false,就像http://jsfiddle.net/6JkZk/1/一样,AJAX请求包含使用data参数指定的实际POST参数。

您应该只设置processData: false,当你提供Stringdata争论,或者当您提供对象具有toString()方法,像这样:http://jsfiddle.net/pDrUX/

+0

nope仍然打破。还有什么我可以上传,让我的例子更清晰? – jambuls

+0

我认为问题是'contentType:false'和'processData:false'结合在一起。 –

+0

@ user1752451 - 我已经提供了一些jsfiddle链接,它们可以帮助你理解发生了什么。因为你已经指定了'processData:false',所以jQuery使用对象字面值的'toString()'方法来填充AJAX请求体,除了默认的'toString()'方法创建字符串'[object Object]' - 有效地丢弃您的数据。 –

-1

后查询试试这个:

var values = '{"name": "' + $("#folderName").val() + '", "dir": "' + directory + '"}'; 
+0

nope依然中断 – jambuls

0

您必须字符串化要发送到服务器的整个对象:

var user = JSON.stringify({"json": values}); 
+0

nope,does not work要么 – jambuls

+0

当'print_r($ _ POST ['json']);''? – 2013-05-26 15:33:18

+0

很好cuz即时通讯使用ajax,并在我的成功有一个警告声明,它会输出一堆html标签,就像php一般打破 – jambuls