菜鸟网络工程师的成长笔记——第14天(2016.08.31)

菜鸟网络工程师的成长笔记——第14天(2016.08.31)

其实感觉Python真的很简单,前端开发,网站开发真的很简单,毕竟很多问题都是很快就能解决的,哪像当初的C++,潜心学那么就,也学不明白。

18.用jQuery获取浏览器当前url

问题类型:前端,jquery

解决状态:已解决

问题描述

最近需要使用ajax向服务器提交数据,那么就需要一个url,硬编码自然不是好的选择,如果能选出浏览器的当前url就好多了。

问题解决

window.local中有一大堆的属性用户获取url相关的数据,[http://blog.unvs.cn/archives/jquery-local-url-param.html]http://blog.unvs.cn/archives/jquery-local-url-param.html)

设置或获取对象指定的文件名或路径。
window.location.pathname
例:http://localhost:8086/topic/index?topicId=361
alert(window.location.pathname); 则输出:/topic/index

设置或获取整个 URL 为字符串。
window.location.href
例:http://localhost:8086/topic/index?topicId=361
alert(window.location.href); 则输出:http://localhost:8086/topic/index?topicId=361

设置或获取与 URL 关联的端口号码。
window.location.port
例:http://localhost:8086/topic/index?topicId=361
alert(window.location.port); 则输出:8086

设置或获取 href 属性中在井号“#”后面的分段。
window.location.hash

设置或获取 location 或 URL 的 hostname 和 port 号码。
window.location.host
例:http://localhost:8086/topic/index?topicId=361
alert(window.location.host); 则输出:http:localhost:8086

设置或获取 href 属性中跟在问号后面的部分。
window.location.search
例:http://localhost:8086/topic/index?topicId=361
alert(window.location.search); 则输出:?topicId=361

window.location
属性 描述
hash 设置或获取 href 属性中在井号“#”后面的分段。
host 设置或获取 location 或 URL 的 hostname 和 port 号码。
hostname 设置或获取 location 或 URL 的主机名称部分。
href 设置或获取整个 URL 为字符串。
pathname 设置或获取对象指定的文件名或路径。
port 设置或获取与 URL 关联的端口号码。
protocol 设置或获取 URL 的协议部分。
search 设置或获取 href 属性中跟在问号后面的部分。

19. ajax发送数据时通过django的csrf验证

问题类型:django,ajax

解决状态:已解决

问题描述

django自带防御csrf攻击的功能,当需要POST数据时,就需要通过这个。之前普通表单比较简单,在表单处添加{% csrf_token %}即可。但是ajax不能这样。

问题解决

解决的一个方法是将csrfmiddlewaretoken: ‘{{ csrf_token }}’放到POST的数据中:

url = window.location.href;
argu = {csrfmiddlewaretoken: '{{ csrf_token }}', "time": new Date() };
$.post(url, argu);

这样带上这组键值对,就可以通过csrf认证了。

django的视图函数读取ajax发送过来的数据:

if request.method == 'POST' and request.is_ajax():
    print(request.POST.get('time'))

其实request.POST是一个Python字典。

20. javascript操作json对象

问题类型:前端,javascript

解决状态:已解决

问题描述

javascript如何定义和操作json对象,比如添加/删除一个键值对。

问题解决

定义json对象:

var jsonobj = {"name": "Bill Gates", "age": 50};

也可以定义一个空的json对象:

var jsonobj = {};

json对象有点像Python的字典,想要添加键值对,直接这样操作:

jsonobj.phone = "13333333333";

或者:

jsonobj['phone'] = "13333333333";

删除键值对用delete:

delete jsonobj.phone;

21. jquery遍历一组元素

问题类型:前端,javascript,jquery

解决状态:已解决

问题描述

有时候会得到一组html元素的集合,需要遍历,比如使用jquery的获取父元素、子元素、同胞元素等方法得到的元素集合对象。

问题解决

使用each()方法,下面是w3school中的例子:

$("button").click(function(){
  $("li").each(function(){
    alert($(this).text())
  });
});

22. jquery获取input元素的值

问题类型:前端,javascript,jquery

解决状态:已解决

问题描述

想通过jquery获取input的输入,但是发现用text方法是空的。

问题解决

等标签不一样,使用val()方法获取内容。

23. javascript中分割以特定字符串隔开的字符串

问题类型:前端,javascript

解决状态:已解决

问题描述

最近项目想要让前端的一大堆输入与后端的数据库对应,使用html中input的id属性来标识对应后端的哪个数据库的哪个列,那么就需要在id中保存数据库表和列两部分信息,比如表名字是vendor,列名字是name,那id属性为id=”vendor.name”,那么就需要一个方法把这两部分分开。

问题解决

javascript提供了一个split方法,分割后悔返回一个字符串数组,比如:

var str = "vendor.name"
var sp = str.split(".");
alter(sp[0]);   // vendor
alter(sp[1]);   // name

24. ajax上传的数据不是json字符串

问题类型:前端,json

解决状态:已解决

问题描述

当ajax需要上传json数据时,不能直接将json对象作为data进行post,这样post上去的是一堆键值对,后端无法解析。

问题解决

有两个函数用于解决json对象和json字符串的相互转化:

  • JSON.stringify()将json对象转换为json字符串,可用于传输。
  • JSON.parse()将json字符串转为json对象。

25. 使用POST头携带csrf token

问题类型:django, javascript, jquery, http

解决状态:已解决

问题描述

使用JSON.stringify()将json对象序列化后,久不能将csrf token放在载荷中了。

问题解决

可以在POST请求中加一个自定义的X-CSRFToken头部。其值为CSRF token,这个值可以通过以下代码获取:

// using jQuery
function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie != '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie('csrftoken');

或者也可以使用jquery cookie plugin中的方法:

var csrftoken = $.cookie('csrftoken');

26. jquery中ajax加入自定义头部的方法

问题类型:前端,jquery, ajax

解决状态:已解决

问题描述

针对上一个问题,需要在jquery发送的POST头部加入自定义头部。

问题解决

$.ajax中可以设置一个名为headers的参数:

$.ajax({
    url: '/path/to/service',
    type:"POST",
    data: data,
    dataType: "json",
    headers: {
        'X-CSRFToken': csrftoken
    }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值