专注于前端开发, 追求更好的用户体验, 更好的开发体验 [长沙前端QQ群:234746733]

jquery jsonp Ajax 跨域提交数据 (PHP)

最近做了一个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上面验证了。

/ 分类: 开发 / TrackBackhttps://xhl.me/archives/678/trackback标签: php, jquery, ajax

已有 6 条评论 »

  1. sean sean

    在PHP文件如何得到提交的数据呢?接着序列化。

    1. kairyou kairyou

      @sean
      序列化后URL类似:xxx.php?id=123&val=bbb
      php只要$_GET['id'] 就OK了(id/val为表单的input的name).

  2. Magento Magento

    你好,最近需要用到跨域提交,想了解下这块博主有没有什么安全方面的建议?

    1. kairyou kairyou

      @Magento
      跨域提交被利用的机会还是蛮大(jsonp其实是get方式),至于安全方面,主要还是在服务端考虑了,比如:$_SERVER['HTTP_REFERER']的判断(但REFERER这些可以伪造的),还有用addslashes过滤POST的字符串(这个比较重要),还有提交后写个cookies记录下(这个要看具体需求,可以简单的禁止重复提交之类的,但对于安全作用不大)。重要的数据最好不要跨域提交,跨域获取到无妨。

  3. ley ley

    json = json || {}; 这种写法,和 eval(json); 有区别吗?

    success:function(json) {
    ........
    },
    error:function(e){ //此处可以使用啊。你指的error是什么??
    alert('请求异常');
    }
    timeout: 3000

    1. kairyou kairyou

      success:function(json) { json是server返回的数据, 有可能返回json或string. 所以json = json || {}比较保险. 和eval完全不同的概念.
      error:function(e){ 是请求server遇到错误触发, success:..里的是后端API验证数据不通过时返回的error msg.

添加新评论 »