将表单脚本从jquery 1.4转换为1.9

时间:2015-09-03 00:03:31

标签: javascript jquery

我想转换我发现的脚本......但我不能。它适用于 Jquery 1.5 。 但它不再适用于 Jquery 1.6

然而我尝试了jquery -migrate(将旧的jQuery代码迁移到jQuery 1.9+)。 但没有结果......

剧本:

$.post('', form.serialize(), function(msg) {
        submitFlag = false;
        overlay.hide();
        $('span.errorIcon').remove();
        if (msg.success) {
            $('#formContainer, #mdiv, #contactboxfloat').fadeOut(function() {
                form.get(0).reset();
                $('#thankYou').fadeIn();
            });
        } else {
            $.each(msg, function(k, v) {
                var errorIcon = $('<span>', {
                    className: 'errorIcon'
                });
                var errorTip = $('<span>', {
                    className: 'errorTip',
                    text: v
                }).hide().appendTo(errorIcon);
                errorIcon.hover(function() {
                    errorTip.stop().fadeIn(function() {
                        errorTip.css('opacity', 1);
                    });
                }, function() {
                    errorTip.stop().fadeOut('slow', function() {
                        errorTip.hide().css('opacity', 1);
                    });
                });
                form.find('[name=' + k + ']').closest('.formRow').append(errorIcon);
                if ($(window).width() - errorIcon.offset().left > 240) {
                    errorTip.css('left', 30);
                } else {
                    errorTip.css('right', 30);
                }
            });
        }
    }, 'json');

php json

    if (!function_exists('json_encode'))
{
    function json_encode($a=false)
    {
        if (is_null($a)) return 'null';
        if ($a === false) return 'false';
        if ($a === true) return 'true';
        if (is_scalar($a))
        {
            if (is_float($a))
            {
                // Always use "." for floats.
                return floatval(str_replace(",", ".", strval($a)));
            }

            if (is_string($a))
            {
                static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
                return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
            }
            else return $a;
        }

        $isList = true;
        for ($i = 0, reset($a); $i < count($a); $i++, next($a))
        {
            if (key($a) !== $i)
            {
                $isList = false;
                break;
            }
        }

        $result = array();
        if ($isList)
        {
            foreach ($a as $v) $result[] = json_encode($v);
            return '[' . join(',', $result) . ']';
        }
        else
        {
            foreach ($a as $k => $v) $result[] = json_encode($k).':'.json_encode($v);
            return '{' . join(',', $result) . '}';
        }
    }
} 

有人可以向我解释是什么阻止了脚本的工作吗?

if($_SERVER['REQUEST_METHOD'] == 'POST'){

    try{
        $contactForm->validate();
        $contactForm->send();
        $thankYou = $config['thankYouMessage'];

        if(IS_AJAX){
            echo json_encode(array('success'=>1));
            exit;
        }
    }
    catch(FormValidateException $e){
        if(IS_AJAX){
            echo json_encode($e->errors);
            exit;
        }
        else{
            $contactForm->populateValuesFromArray($_POST);
        }
    }
    catch(Exception $e){
        die('{"exception":"'.$e->getMessage().'"}');
    }

}

1 个答案:

答案 0 :(得分:0)

有两个主要因素,可以制止JQuery的向后兼容性:

  • $()不再与$(document)相同,它是一个空的jQuery对象
  • jQuery只会解析VALID JSON,而不是看起来像JSON但在技术上无效的东西

请检查,如果您的JSON有效。

来源:https://forum.jquery.com/topic/jquery-1-8-1-and-jquery-1-4-backward-compatible-with-existing-jquery-1-3-2-custom-code