PHP容易忽略的小知识

2017-11-25  本文已影响19人  bo_bo_bo_la

1. JSON.parse()

JSON.parse用于从一个字符串中解析出json对象
例如:

var str = '{"name":"huangxiaojian","age":"23"}'
JSON.parse(str);

结果:Object
age: "23"
name: "huangxiaojian"
proto: Object
注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。

2. JSON.stringify()

JSON.stringify()用于从一个对象解析出字符串
例如:

var a = {a:1,b:2}
JSON.stringify(a)

结果:"{"a":1,"b":2}"

下面代码,炸一看没什么毛病,代码简单明了,但是运行的时候却报错。

    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script type="text/javascript">
        window.onload = function() {
            var formData = new FormData();
            formData.append('username','iiii');
            $.ajax({
                type:"post",
                url:"regist/regist2.php",
                async:true,
                data: formData,
                dataType: "json",
                success: function(data) {
                    console.log(data);
                }
            });
        }
    </script>
错误信息

Jquery实现Ajax异步提交时报错"Uncaught TypeError: Illegal invocation",百度一查发现formData是一个对象,在JQ封装是Ajax发送请求上传数据的时候,只能传字符串,jquery传递对象/数组,无法传递,并且服务端无法获取数据。JSON.stringify()方法,它可以将客户端发送的JSON数据对象进行序列化操作。因为需要把对象json序列化后,才能传递到后台,后台根据json字符串进行反序列化。

data:{wi:JSON.stringify(formData)}, // 将formData实例化

当然,当使用原生Ajax时,可以不用实例化

// 原生 Ajax
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script type="text/javascript">
        window.onload = function() {
            var formData = new FormData();
            formData.append('username','iiii');
            var xhr = new XMLHttpRequest();
            xhr.onload = function() {
                console.log(this.responseText)
            }
            xhr.open("POST","regist/regist2.php",true);
            xhr.send(formData);
        }
    </script>

3. header()

header() 函数向客户端发送原始的 HTTP 报头。
例如:

<?php
// 结果出错
// 在调用 header() 之前已存在输出
header('Location: http://www.example.com/');
?>

上述函数只用于form表单提交。

通过表单提交的时候可以做个判断,当用户名所在的输入框为空时,button按钮变成不可点击,如果不为空,button按钮设置为可点击按钮。

<body>
        <form name="form1" action="" method="post">
            用户名:<input type="text" name="con" id="con" value="" />
            密 码:<input type="password" name="password" id="password"/>
            <input type="button" name="btn" id="btn" value="提交"/>
        </form>
    </body>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script type="text/javascript">
        $('#con').blur(function() {
            if($('#con').val() == "") {
                document.form1.btn.disabled = true;
            }else {
                document.form1.btn.disabled = false;
            }
        })
    </script>

4. 自定义属性

          var checks = $("input:checkbox");
            var userSelect = [];
            var _key = 0;
            for(var i in checks) {
                if(checks[i].checked == true) {
                    userSelect[_key].name = $(".name_"+i+"").html();
                    userSelect[_key].amount = $("input:text")[i].value;
                    _key++;
                }
            }
image.png

why????因为userSelect是数组,userSelect[]是值,不能直接设置属性,

            var checks = $("input:checkbox");
            var userSelect = [];
            var _key = 0;
            for(var i in checks) {
                if(checks[i].checked == true) {
                    userSelect[_key] = {}; // 将userSelect = [] 设置为对象
                    userSelect[_key].name = $(".name_"+i+"").html();
                    userSelect[_key].amount = $("input:text")[i].value;
                    _key++;
                }
            }
上一篇下一篇

猜你喜欢

热点阅读