2011-08-21 70 views
1

我有一个JSON对象

{ 
    "widgetSettings":[{"maxDisplay": 6, "maxPerRow": 2}], 
    "widgets": [ 
     {"wigetID": 1, "show": false, "weight": 0, "widgetTitle": "Widget 1", "widgetColor": "defualt"}, 
     {"wigetID": 2, "show": false, "weight": 0, "widgetTitle": "Widget 2", "widgetColor": "defualt"}, 
     {"wigetID": 3, "show": false, "weight": 0, "widgetTitle": "Widget 3", "widgetColor": "defualt"}, 
     {"wigetID": 4, "show": false, "weight": 0, "widgetTitle": "Widget 4", "widgetColor": "defualt"}, 
     {"wigetID": 5, "show": false, "weight": 0, "widgetTitle": "Widget 5", "widgetColor": "defualt"}, 
     {"wigetID": 6, "show": false, "weight": 0, "widgetTitle": "Widget 6", "widgetColor": "defualt"}, 
     {"wigetID": 7, "show": false, "weight": 0, "widgetTitle": "Widget 7", "widgetColor": "defualt"}, 
     {"wigetID": 8, "show": false, "weight": 0, "widgetTitle": "Widget 8", "widgetColor": "defualt"}, 
     {"wigetID": 9, "show": false, "weight": 0, "widgetTitle": "Widget 9", "widgetColor": "defualt"}, 
     {"wigetID": 10, "show": false, "weight": 0, "widgetTitle": "Widget 10", "widgetColor": "defualt"}, 
     {"wigetID": 11, "show": false, "weight": 0, "widgetTitle": "Widget 11", "widgetColor": "defualt"}, 
     {"wigetID": 12, "show": false, "weight": 0, "widgetTitle": "Widget 12", "widgetColor": "defualt"}, 
     {"wigetID": 13, "show": false, "weight": 0, "widgetTitle": "Widget 13", "widgetColor": "defualt"}, 
     {"wigetID": 14, "show": false, "weight": 0, "widgetTitle": "Widget 14", "widgetColor": "defualt"}, 
     {"wigetID": 15, "show": false, "weight": 0, "widgetTitle": "Widget 15", "widgetColor": "defualt"}, 
     {"wigetID": 16, "show": false, "weight": 0, "widgetTitle": "Widget 16", "widgetColor": "defualt"} 
]} 

我想用jQuery来张贴到一个服务器端脚本,所以我可以将其保存在数据库中。当我说保存它时,我的意思是作为JSON对象。然而,当你发布帖子/获取其他发布的方式是JSON格式时,我发布的JSON使我可以保存在数据库中,看起来好像丢了,而数据库却留下了一个空值。任何想法,我可能做错了..继承人的jQuery部分。

$.post('ui-DashboardWidgetsPost.php', {"dashWidgets":dashboardJSON}, function(msg) 
    { 
     if(msg.error == "yes"){console.log('Error Found: '+ msg.errorMsg);} 
     else 
     { 
     } 
    }); 

编辑 的PHP

<?php 
$validJSON = $_POST['dashWidgets']; 

mysql_connect("127.0.0.1", "", "") or die('{"error": "yes", "errormsg": "'.mysql_error().'"}'); 
mysql_select_db("xxxx") or die('{"error": "yes", "errormsg": "'.mysql_error().'"}'); 

$result = mysql_query("UPDATE dashboardPrefs SET widgetSettings='".$validJSON."' WHERE userID=100") 
or die('{"error": "yes", "errormsg": "'.mysql_error().'"}'); 

echo '{"error": "none"}'; 
?> 
+1

你能告诉我们在服务器端的PHP代码,以及服务器接收的确切数据吗? – Bojangles

+1

'dashboardJSON'是一个**字符串**(它必须是)?也许你必须将该值赋给一个键:'{data:dashboardJSON}',然后访问POST'data'值。 –

+0

编辑过的帖子来显示PHP和@Robus,我注意到它刚刚编辑之前结束它:) – chris

回答

4

如果你想(而不是实际值作为字符串)发送JSON到数据库,也许你应该把它作为一个?

$.post('ui-DashboardWidgetsPost.php', { 
    json: dashboardJSON 
}, function(msg) { 
    msg=jQuery.parseJSON(msg); 
    if (msg.error == "yes") { 
     console.log('Error Found: ' + msg.errorMsg); 
    } else { ... } 
}); 
2

你确定你的服务器正在解析它吗?事实证明这个问题在你的PHP中。

您最好也确保数据正确移动,您可以通过Chrome/Firebug的网络选项卡执行此操作。话虽如此,我更喜欢使用像Fiddler这样的外部数据包嗅探器(或Mac上的HTTPScoop)。

2

你可以做这样的事情:

  1. 使用JavaScript对象方法JSON.parse
  2. 设置一定的岗位价值,我们会说“JSON”
  3. 阅读并解码在服务器上。使用PHP,这会像json_decode($ _ POST ['json'])。

因此,在客户端上的代码可能是:

$.post('ui-DashboardWidgetsPost.php', 'json=' + JSON.parse(dashboardJSON), function(msg) 
    { 
     if(msg.error == "yes"){console.log('Error Found: '+ msg.errorMsg);} 
     else 
     { 
     } 
    }); 

而在PHP:

$jsonDecoded = json_decode($_POST['json']) 
2

使用json作为第四参数。

$.post('ui-DashboardWidgetsPost.php', dashboardJSON, function(msg) 
    { 
     if(msg.error == "yes"){console.log('Error Found: '+ msg.errorMsg);} 
     else 
     { 
     } 
    }, 'json');