ajax跨域(跨项目)

Posted 筑梦前端

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax跨域(跨项目)相关的知识,希望对你有一定的参考价值。

 潭州 

昨天下午修改了ajax跨域的问题,是一个以前的项目但是现在那边后台没有了方法。

所以只能自己写一些假的数据返回到前台。


前台ajax请求:

function jsonImpl(arr){

$.ajax({

              type:"post",    //请求方式

              /* async:true, */    //是否异步

              url:"http://127.0.0.1:8080/zttppi/order.WKCS.addNum.hf",

              dataType:"jsonp",    //跨域json请求一定是jsonp

              jsonp: "callbackparam",    //跨域请求的参数名,默认是callback

              jsonpCallback:"successCallback",    //自定义跨域参数值,回调函数名也是一样,

              默认为jQuery自动生成的字符串

              data:{"gid":arr},    //请求参数

              beforeSend: function() {

                  //请求前的处理

              },

              success: function(urldata) {

                      alert("aaaaaa");

              },

              complete: function() {

                  //请求完成的处理

              },

              error: function(XMLHttpRequest,textStatus,errorThrown) {

                  alert(3);

                  alert(XMLHttpRequest.status);        //请求状态值 200为成功

                  alert(XMLHttpRequest.readyState);        //4 为完成

                  alert(textStatus);  //状态

              }

     });

}


后台代码:

public class WKCS {

List<GoodsDO> GDOS=new ArrayList<GoodsDO>();

public String gid;

public String price;

public String order_id;

@SuppressWarnings("static-access")

public void addNum(HFContext ctx) {

ctx.input.fillVO(this);

GoodsDO gdo = new GoodsDO();

gdo.setName("苹果");

gdo.setSku("sss");

gdo.setPrice("22");

GDOS.add(gdo);

GoodsDO gdo1 = new GoodsDO();

gdo1.setName("橘子");

gdo1.setSku("sss");

gdo1.setPrice("23");

GDOS.add(gdo1);

GoodsDO gdo2 = new GoodsDO();

gdo2.setName("耐克鞋");

gdo2.setSku("sss");

gdo2.setPrice("233");

GDOS.add(gdo2);

GoodsDO gdo3 = new GoodsDO();

gdo3.setName("匹克衣服");

gdo3.setSku("sss");

gdo3.setPrice("345");

GDOS.add(gdo3);

GoodsDO gdo4 = new GoodsDO();

gdo4.setName("橘子");

gdo4.setSku("sss");

gdo4.setPrice("23");

GDOS.add(gdo4);

try {

String url = ctx.input.getRequestURLAsString();

LogUtil.log("请求url" + url);

/*JSONObject postData = ctx.input.getPostDataAsJSON();*/

// 获取请求参数

                 String gid = postData.getString("gid");


LogUtil.log("获取请求参数为:" + "gid:" + gid );


                        //上面的获取参数与方法是按照公司的框架写的 需要改掉


JSONArray json=new JSONArray();        //获取JSONObject对象

String callback = ctx.request.getParameter("callbackparam");    

                        //获取前台的回调函数

String retStr = callback +"("+json.fromObject(GDOS).toString()+")";


                           // json.fromObject(GDOS).toString()将集合数据转换为json数据


                           //前台jsonp数据格式为:回调函数+(json类型数据) 

                            例如 successCallback({“name”:“zhangsan”})


ctx.output.returnStringDirectly(retStr);

} catch (Exception e) {

LogUtil.exception(e);

}

}


}


我就是因为在后台返回数据时格式的问题 一直进入error方法中而不进入success中,我在error中让其显示状态码与其他的返回值共有三个,XMLHttpRequest.status ,XMLHttpRequest.readyState,textStatus前两个都是正常的一个显示200,一个显示4 只有最后一个是parsererror表示传送格式不对,后来上网上查询了一下原来jsonp从后台向前台传数据时还要加上回调方法+();


温馨提示:文章素材来源于网络,版权归原作者所有!

以上是关于ajax跨域(跨项目)的主要内容,如果未能解决你的问题,请参考以下文章

关于ajax访问跨域问题

标头无法使用跨域传入 ajax

AJAX 请求跨域请求被阻止错误

ajax跨域的处理方法

如何解决前端跨域问题?

允许跨域ajax请求