最近做了一个Ajax提交反馈页,但是由于空间不支持一些基本的函数,所以准备做个跨域提交。
javascript部分:
- $("#btn").click(function(k) {
- //...
- var j = form.serializeArray();//序列化name/value
- $.ajax({
- url: "另一个域名/test.php",
- dataType: 'jsonp',
- data: j,
- jsonp: 'jsonp_callback',
- success: function(json) { //返回的json数据
- json = json || {};
- if (json.msg=='err'){
- alert(json.info);
- }else if (json.msg=="ok"){
- alert('提交成功');
- }else{
- alert('提交失败');
- }
- },
- timeout: 3000
- })
- //...
- });
php部分:
- $jsonp_callback=$_GET['jsonp_callback'];
- //...
- //如果正确
- echo $jsonp_callback,'({"msg":"ok"})';
- //如果错误
- echo $jsonp_callback,'({"msg":"err","info":"因人品问题,发送失败"})';
- //...
值得注意的是采用jsonp 方式,beforeSend / error 都不能用了,所以beforeSend里面用js实现的验证只能用ajax在服务器端test.php上面验证了。
在PHP文件如何得到提交的数据呢?接着序列化。
@sean
序列化后URL类似:xxx.php?id=123&val=bbb
php只要$_GET['id'] 就OK了(id/val为表单的input的name).
你好,最近需要用到跨域提交,想了解下这块博主有没有什么安全方面的建议?
@Magento
跨域提交被利用的机会还是蛮大(jsonp其实是get方式),至于安全方面,主要还是在服务端考虑了,比如:$_SERVER['HTTP_REFERER']的判断(但REFERER这些可以伪造的),还有用addslashes过滤POST的字符串(这个比较重要),还有提交后写个cookies记录下(这个要看具体需求,可以简单的禁止重复提交之类的,但对于安全作用不大)。重要的数据最好不要跨域提交,跨域获取到无妨。
json = json || {}; 这种写法,和 eval(json); 有区别吗?
success:function(json) {
........
},
error:function(e){ //此处可以使用啊。你指的error是什么??
alert('请求异常');
}
timeout: 3000
success:function(json) { json是server返回的数据, 有可能返回json或string. 所以json = json || {}比较保险. 和eval完全不同的概念.
error:function(e){ 是请求server遇到错误触发, success:..里的是后端API验证数据不通过时返回的error msg.