加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 教程 > 正文

用jQuery与JSONP简单解决跨域访问的问题

发布时间:2023-10-04 14:29:20 所属栏目:教程 来源:
导读:时间过得好快,又被拉回js战场时, 跨域问题这个伤疤又开疼了.

好在,有jquery帮忙,跨域问题似乎没那么难缠了.这次也借此机会对跨域问题来给刨根问底,结合实际的开发项目,查阅了相关资料,算是解决了跨域问题..有必要
时间过得好快,又被拉回js战场时, 跨域问题这个伤疤又开疼了.
 
好在,有jquery帮忙,跨域问题似乎没那么难缠了.这次也借此机会对跨域问题来给刨根问底,结合实际的开发项目,查阅了相关资料,算是解决了跨域问题..有必要记下来备忘.
 
跨域的安全限制都是指浏览器端来说的.服务器端是不存在跨域安全限制的,所以通过本机服务器端通过类似httpclient方式完成“跨域访问”的工作,然后在浏览器端用AJAX获取本机服务器端“跨域访问”对应的url.来间接完成跨域访问也是可以的.但很显然开发量比较大,但限制也最少,很多widget开放平台server端(如sohu博客开放平台)其实就么搞的.不在本次讨论范围.
 
要讨论的是浏览器端的真正跨域访问,推荐的是目前jQuery $.ajax()支持get方式的跨域,这其实是采用jsonp的方式来完成的.
 
真实案例:
 
代码如下:
 
var qsData = {'searchWord':$("#searchWord").attr("value"),'currentUserId':$("#currentUserId").attr("value"),'conditionBean.pageSize':$("#pageSize").attr("value")};
 
$.ajax({
 
   async:false,
 
   url: http://跨域的dns/document!searchJSONResult.action,
 
   type: "GET",
 
   dataType: 'jsonp',
 
   jsonp: 'jsoncallback',
 
   data: qsData,
 
   timeout: 5000,
 
   beforeSend: function(){
 
   //jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了
 
   },
 
   success: function (json) {//客户端jquery预先定义好的callback函数,成功获取跨域服务器上的json数据后,会动态执行这个callback函数
 
    if(json.actionErrors.length!=0){
 
           alert(json.actionErrors);
 
     }
 
       genDynamicContent(qsData,type,json);
 
   },
 
    complete: function(XMLHttpRequest, textStatus){
 
    $.unblockUI({ fadeOut: 10 });
 
   },
 
   error: function(xhr){
 
    //jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了
 
    //请求出错处理
 
    alert("请求出错(请检查相关度网络状况.)");
 
   }
 
});
 
注意:
 
代码如下:
 
$.getJSON(" http://跨域的dns/document!searchJSONResult.action?name1="+value1+"&jsoncallback=?",
 
      function(json){
 
      if(json.属性名==值){
 
      // 执行代码
 
            }
 
        });
 
这种方式其实是上例$.ajax({..}) api的一种高级封装,有些$.ajax api底层的参数就被封装而不可见了.
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章