Javascript/JQuery AJAX 无法解析 AJAX 响应

标签 javascript jquery css ajax

我知道有关于此的帖子,但我似乎找不到它们。这是我愚蠢的地方:

我有一个 AJAX 请求一个 id 和一个整数(稍后将在 DOM 上应用边距)

请求如下:

$(function(){
    $("#divAccordion").accordion({
    //Accordion options here, not relevant
    }).sortable({
    //Other sortable options here, not relevant
    //This is the important part:
        update:
            function(event, ui){
                var data = $(this).sortable('toArray');
                $.ajax({
                    url:"prc.php",
                    type:"POST",
                    dataType:'JSON',/*--Added this also--*/
                    data:{sort:data},
                    contentType : "application/x-www-form-urlencoded;charset=UTF-8"
                }).done(
                    function(margin){
                        console.log(margin);//This log [sebastien20140804130001:45, sebastien20140804130002:30]
                        for(key in margin){
                            console.log(key+"=>"+margin[key]);
                        }
                    }
                );
            }
    });
});

这是我在控制台中得到的:

[sebastien20140804130001:45, sebastien20140804130002:30]
0=>[
1=>s
2=>e
3=>b
4=>a
...

看到问题了吗?我的响应(边距)是一个字符串,我的 for 循环遍历每个字符。 我期待这样的事情:

[sebastien20140804130001:45, sebastien20140804130002:30]
sebastien20140804130001=>45
sebastien20140804130002=>30

只是一个旁注,如果 ID 彼此跟随(数字顺序)([ID:MARGIN_TO_APPLY]),我不知道我会收到多少“键/值”对

我的目标是能够遍历每个“键/值”对并应用如下内容:

$('#'+key).css('margin-left', value);

如果你们需要任何其他信息,请在评论中询问,我会提供给他们。

谢谢!

--编辑--

服务器端代码如下:

echo '{';/*--was [--*/
sortRN('rn_GLOBAL', 0);
echo '}';/*was ]--*/

function sortRN($dep, $i)
{
    if(isset($_POST['sort'][$i]) && $_POST['sort'][$i] != '')
    {
        $cnSort = new cConnexion('***', '***', '***', '***');
        if($cnSort->DBConnexion())
        {
            $query = "UPDATE ***.reunion SET rn_DEP = :DEP WHERE REPLACE(REPLACE(REPLACE(CONCAT('rn_', rn_SAMAORG, rn_DTSTART), ' ', ''), ':', ''), '-', '') = :ID";

            while(isset($_POST['sort'][$i]) && preg_match('#^.+[0-9]{4}$#', $_POST['sort'][$i]))
            {
                if($i > 0)
                {
                    echo ',';/*--Added this so there wouldn't always be a coma at the end--*/
                }

                switch($dep)
                {
                    case 'rn_GLOBAL':
                        $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                        $rsSort = $cnSort->SecureExecute($query, $params);
                        if($rsSort)
                        {
                            echo '{"'.$_POST['sort'][$i].'":15}';/*--Changed every line like this to add {} and also removed the coma at the end--*/
                        }
                    break;
                    case 'rn_JRT':
                        $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                        $rsSort = $cnSort->SecureExecute($query, $params);
                        if($rsSort)
                        {
                            echo '"'.$_POST['sort'][$i].'":30,';
                        }
                    break;
                    case 'rn_ACHAT':
                        $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                        $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_ADM':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_ASC':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_COMP':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_DIRECTION':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_INDUS':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_INFO':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_PROD':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_RED':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_STD':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_TEST':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_VENTE':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_CUSTOME':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_CRP':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":30,';
                    }
                break;
                case 'rn_FAB':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_IC':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_MAG':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_PRD':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_SERV':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_VE':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":45,';
                    }
                break;
                case 'rn_CAL':
                    $params = array('DEP'=>str_replace('rn_', '', $dep), 'ID'=>$_POST['sort'][$i]);

                    $rsSort = $cnSort->SecureExecute($query, $params);
                    if($rsSort)
                    {
                        echo '"'.$_POST['sort'][$i].'":30,';
                    }
                break;  
            }
            $i++;
        }

        $cnSort->DBDeconnexion();
        if(isset($_POST['sort'][$i]) && $_POST['sort'][$i] != '')
        {
            $ii = $i + 1;
            sortRN($_POST['sort'][$i], $ii);
        }
    }
    else
    {
        echo $cnSort->m_log->getMessageFR();
    }
}
}

旁注 #2:PHP 脚本使用 JQuery 可排序项的位置更新数据库,然后它回显元素 ID 和边框值。

--EDIT2--

我更改了一些代码,请参见上面的代码/——以这种方式突出显示——/

最佳答案

  1. 响应不是有效的 JSON(规范:http://json.org/)。它发送一个数组,但每个元素都不是有效对象。它应该是这样的:

    [{"sebastien20140804130001": 45}, {"sebastien20140804130002": 30}]

  2. 收到响应后,您必须执行 JSON.parse(response) 以转换为 JSON 对象,或使用 dataType: 'json' 配置,以便 jQuery 自动为您完成。

关于Javascript/JQuery AJAX 无法解析 AJAX 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25210797/

相关文章:

javascript - 覆盖 Bootstrap 表选定的行背景颜色

javascript - 如何根据光标的来源对元素执行操作

javascript - 为每个 jquery 的输入设置一个值

javascript - 如何检查焦点上的每个输入

javascript - HTML 按钮突出显示 Jquery 不起作用

javascript - jQuery - 当用户在输入中输入内容时,将 div 从另一个 div 下滑出和向下滑动

html - 悬停时在 "a"内设置 "li"颜色

html - 展开背景照片整个宽度的卡片

JavaScript 函数表达式

javascript - 仅使用 getBoundingClientRect 查找 svg 特定区域中的元素