zoukankan      html  css  js  c++  java
  • jQuery跨域心得

    一个项目由于用了二级域名,但是需要请求的文件位于www域名下,几次请求没在firebug看到任何请求信息的情况下我突然意识到,我也碰到了这个该死的跨域请求的问题,于是google之,网上找到了几乎相同的解决方案,用jQuery的json方式解决,我多次试验,最后甚至原封不动地拷来代码,均失败,才最终在另一处博客发现原来光客户端请求也不够,服务器端不能光返回json数据了,而是要返回一个回调函数,这才解释了为什么客户端为什么要以get方式送一个 callback进去,这样,前端+后端,立刻成功,代码如下:

    前可以采用这三种方式请求,大同小异,看个人爱好了:高亮部分是需要注意的

    假设要跨域请求的网址为   http://www.b.com/demo.php&action=funcname

    则应写成请求如下网址:var url= "http://www.b.com/demo.php&action=funcname&callback=?";

    1,经典方式:

    代码
    1 $.ajax({
    2 type : "GET",
    3 url : url,
    4 dataType : "jsonp",
    5 jsonp: 'callback',
    6 success : function(json){
    7 //do something here;
    8   }
    9 });

    2,json方式,是方法一的高级封装

       

     $.getJSON(url, function(json){/*do something here;*/});

    3,我比较别扭,喜欢用这一种,因为毕竟get是用得最多的,也最有感情啦

       

     $.get(url,function(json){/*do something here;*/},”jsonp”);

    好了,这不是重点,我照着这三种方法都写过,全失败,原来需要服务端返回的是

     JQUET0988788({"account":"XX","passed":"true","error":"null"});
    //(字符串)这样的代码,而不是
    {
    "account":"XX","passed":"true","error":"null"},

    函数名就是你在服务端 request一下callback就可以了,两个括号也要加上,注意,是拼成字符串出去,然后,保你立刻成功

    如:echo $_REQUEST['callback'].'('.$str.')';

    总结,用JSONP要做两件事:

          1/请求地址加参数:callback=?
          2/服务器段把callback的值作为方法名传回来,如”JQUET098788(json)”

    当然,别忘了这种情况下只能返回 json数据了。

  • 相关阅读:
    简单了解Linux文件目录
    解决GitLab的Forbidden和Nginx启动失败
    浅谈apidoc的使用
    Linux安装apidoc
    DevExpress的GridControl的实时加载数据解决方案(取代分页)
    Devexpress使用经验1
    ajax下载文件
    var str = "1,21,".TrimEnd(',');
    MSSQ调优所需用的语句
    js中替换返回json中的空格为 
  • 原文地址:https://www.cnblogs.com/walkerwang/p/1763858.html
Copyright © 2011-2022 走看看