从 xhrPost 调用 spring 控制器不会重定向

calling a spring controller from xhrPost doesnot redirect

我正在从 dojo xhrPost 调用一个 spring 控制器方法,我需要从该控制器方法重定向到一个新的 html。但是控制器 returns 回到 javascript 的道场而不是移动到新页面。

我的javascript:

var xhrArgs={
                        url:"/tradeIn/submitTradeIn",
                        postData:dojo.toJson(tradeInDetails),
                        handleAs:"text",
                        headers:{"Content-Type":"application/json"}
                        /*load:function(data){
                            console.log(data);
                            label=data;
                            if(data =="fail"){
                                location.reload(true);
                                window.location="/Fail";
                            }
                            else{
                                window.location="/success";



                            }
                        }*/
                }

                var deferred=dojo.xhrPost(xhrArgs);

我的 spring 控制器:

@RequestMapping(value="/tradeIn/submitTradeIn", method = {RequestMethod.POST})
public    String submitTradeIn(@RequestBody TradeInDetails tradeDetails) throws UnsupportedEncodingException{

    List<byte[]> labelList=new ArrayList<byte[]>();
    ShippingInfo shippingInfo=new ShippingInfo();
    shippingInfo.setAddress1(tradeDetails.getCustomerDetails().get(0).getAddress1());
    shippingInfo.setAddress2(tradeDetails.getCustomerDetails().get(0).getAddress1());
    shippingInfo.setCity(tradeDetails.getCustomerDetails().get(0).getCity());
    shippingInfo.setCompany(tradeDetails.getCustomerDetails().get(0).getCompany());
    shippingInfo.setDayPhone(tradeDetails.getCustomerDetails().get(0).getDayPhone());
    shippingInfo.setEmail(tradeDetails.getCustomerDetails().get(0).getEmail());
    shippingInfo.setEvePhone(tradeDetails.getCustomerDetails().get(0).getEvePhone());
    shippingInfo.setFirstName(tradeDetails.getCustomerDetails().get(0).getFirstName());
    shippingInfo.setLastName(tradeDetails.getCustomerDetails().get(0).getLastName());
    shippingInfo.setState(tradeDetails.getCustomerDetails().get(0).getState());
    shippingInfo.setZip(tradeDetails.getCustomerDetails().get(0).getZip());
    shippingInfo.setCountry(tradeDetails.getCustomerDetails().get(0).getCountry());
    List<ReturnRequestLabel> label; 
    List<TradeInClubs> tradeInList1= new ArrayList<TradeInClubs>();
    for(ClubDetails cl: tradeDetails.getClubDetails()){
        TradeInClubs tradeInclubs1=new TradeInClubs();
        tradeInclubs1.setClubMaterial(cl.getShaftType());
        tradeInclubs1.setClubType(cl.getClubType());
        tradeInclubs1.setManufacturer(cl.getClubManufacturer());
        tradeInclubs1.setModel(cl.getClubModel());
        tradeInclubs1.setTradeInValue(cl.getTradeInPrice());
        tradeInList1.add(tradeInclubs1);
    }
    try{

        ReturnFedexLabel returnFedexLabel = new ReturnFedexLabel();
        label=returnFedexLabel.fetchFedexLabel(tradeInList1, shippingInfo);
        byte[] labelImageData;

        String fedexLabelNumber=null;
        for(ReturnRequestLabel rl: label){
            labelImageData=rl.fedexReturnLabel.imageData;
            labelList.add(labelImageData);
            fedexLabelNumber=rl.trackingNumber;

        }
        File f=new File("label.jpg");
        BufferedImage img=ImageIO.read(new ByteArrayInputStream(labelList.get(0)));

        ImageIO.write(img,"JPEG",f);
        int id=tradeInDao.insertQuery(shippingInfo,tradeInList1,fedexLabelNumber);
        byte[] pdfData=fedexLabelToPdf.printFedexLabel(labelList);
        emailTradeIn.emailTradeInDetails(pdfData,tradeDetails.getCustomerDetails().get(0).getEmail(),tradeInList1,id);
        System.out.println("here");


    } catch (Exception e){
        logger.error(e.getMessage());
        return "fail";

    }



    return "success";//Base64.encodeBase64String(labelList.get(0));
}

它没有移动到成功页面。它只停留在当前页面

查一下deferred是什么,估计是"success".

来自http://dojotoolkit.org/reference-guide/1.7/quickstart/ajax.html

dojo.xhrPost xhrPost will create an Ajax request using the HTTP POST method and is usually used to submit data to a service. It returns data to a callback. The callback is defined as a member of the object used to create the request (the property-bag), or by using the dojo.Deferred.then() method.

For complete details and examples, see the dojo.xhrPost documentation.

如果您需要从控制器更改页面,则不应是 ajax 请求。如果您可以从客户端更改它,那么您可以继续 ajax 请求并做出相应的响应。