JQuery $ .post () JSON Object - PullRequest
       33

JQuery $ .post () JSON Object

1 голос
/ 21 августа 2011

У меня есть объект 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
        {
        }
    });

EDIT 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"}';
?>

Ответы [ 4 ]

4 голосов
/ 21 августа 2011

Если вы хотите отправить 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 голосов
/ 21 августа 2011

Используйте json в качестве четвертого параметра.

$.post('ui-DashboardWidgetsPost.php', dashboardJSON, function(msg)
    {
        if(msg.error == "yes"){console.log('Error Found: '+ msg.errorMsg);}
        else
        {
        }
    }, 'json');
2 голосов
/ 21 августа 2011

Вы можете сделать что-то вроде этого:

  1. Используйте метод объекта Javascript JSON.parse
  2. Установите значение для определенного значения POST, мы скажем "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 голосов
/ 21 августа 2011

Вы уверены, что ваш сервер анализирует его правильно? Тот факт, что это так далеко, подразумевает, что проблема в вашем PHP.

Лучше всего также убедиться, что данные перемещаются по проводам правильно, что вы можете сделать через вкладку сети Chrome / Firebug. При этом я предпочитаю использовать внешний анализатор пакетов, такой как Fiddler (или HTTPScoop на Mac).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...