Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Chrome上使用jQueryUI进度条和ajax时的奇怪行为_Jquery_Jquery Ui_Jsp_Google Chrome_Progress Bar - Fatal编程技术网

在Chrome上使用jQueryUI进度条和ajax时的奇怪行为

在Chrome上使用jQueryUI进度条和ajax时的奇怪行为,jquery,jquery-ui,jsp,google-chrome,progress-bar,Jquery,Jquery Ui,Jsp,Google Chrome,Progress Bar,最近,我正在尝试使用ajax的jQueryUI进度条来构建文件上传进度条 它就像IE和firefox中的魅力一样,但Chrome中的行为非常怪异,这让我觉得我在编码部分做错了什么 我的设计是循环ajax函数来检索从servlet读取的上传字节,它在IE和firefox中工作 但是,在Chrome中运行时,ajax函数只能检索一次读取的上传字节,也就是第一次仅循环成功 在Chrome浏览器的左下角,upload percent计数器显示上载仍在运行,这使我认为问题与ajax调用有关 我试图从aj

最近,我正在尝试使用ajax的jQueryUI进度条来构建文件上传进度条

它就像IE和firefox中的魅力一样,但Chrome中的行为非常怪异,这让我觉得我在编码部分做错了什么

我的设计是循环ajax函数来检索从servlet读取的上传字节,它在IE和firefox中工作

但是,在Chrome中运行时,ajax函数只能检索一次读取的上传字节,也就是第一次仅循环成功

在Chrome浏览器的左下角,upload percent计数器显示上载仍在运行,这使我认为问题与ajax调用有关

我试图从ajax打印错误消息,但结果没有错误消息

请在下面找到我的源代码:

阿贾克斯:

ProgressListener:

public class UploadProgressListener implements ProgressListener {

private HttpSession session;
private int percentDone = 0;
private long bytesRead;
private long contentLength;
private int items;

private static final Logger logger = Logger.getLogger(UploadProgressListener.class);

public UploadProgressListener(HttpSession session) {
    this.session = session;
    ProgressEntity entity = new ProgressEntity();
    session.setAttribute("upload_file", entity);
}

public void update(long bytesRead, long contentLength, int items) {

    ProgressEntity entity = (ProgressEntity) session.getAttribute("upload_file");

    entity.setBytesRead(bytesRead);
    entity.setContentLength(contentLength);
    entity.setItems(items);

    session.setAttribute("upload_file", entity);

    this.bytesRead = bytesRead;
    this.contentLength = contentLength;
    this.items = items;

}

public long getBytesRead() {
    return this.bytesRead;
}

}
多部分解析器:

public class ProgressUploadMultipartResolver extends CommonsMultipartResolver {

private HttpServletRequest request;
private static final Logger logger = Logger.getLogger(ProgressUploadMultipartResolver.class);

protected FileUpload newFileUpload(FileItemFactory fileItemFactory) {

    ServletFileUpload upload = new ServletFileUpload(fileItemFactory);
    upload.setSizeMax(-1);

    if(request != null) {
        HttpSession session = request.getSession();
        UploadProgressListener uploadProgressListener = new UploadProgressListener(session);
        upload.setProgressListener(uploadProgressListener);
    }

    return upload;
}

@Override
public MultipartHttpServletRequest resolveMultipart (HttpServletRequest request) throws MultipartException {
    this.request = request;
    return super.resolveMultipart(request);
}

@Override
public MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {
    HttpSession session = request.getSession();

    String encoding = "utf-8";
    FileUpload fileUpload = prepareFileUpload(encoding);

    UploadProgressListener uploadProgressListener = new UploadProgressListener(session);
    fileUpload.setProgressListener(uploadProgressListener);
    try {

        List<FileItem> fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);
        return parseFileItems(fileItems, encoding);

    } catch(FileUploadBase.SizeLimitExceededException e) {
        e.printStackTrace();
    } catch (FileUploadException e) {
        e.printStackTrace();
    }

    return null;
}

}
}

请让我知道,如果你需要我提供更多的源代码

多谢各位

更新:

请在上面找到进度条的Javascript函数

单击submit按钮时将调用fSubmit()函数

更新2:


还添加了其他java代码。

因为没有人能给出合适的答案(也许我的问题太奇怪了??)

在这里,我想回答我自己的问题,我最终是如何完成的

因此,如果有人遇到类似的问题,他们将有一个可能的解决方案来尝试

答案很简单,

我在jsp中创建了一个iframe,并将表单的目标设置为该iframe

然后,Chrome中的进度条就像魅力一样工作

我对ajax和jQuery领域实在太陌生了,所以我不知道为什么一个iframe就可以解决这个困扰我一周的问题

虽然我必须处理另一个问题,因为终结点jsp现在显示在iframe中而不是父页面中,但至少进度条在所有常见浏览器中都正常工作,重定向问题是明天要解决的另一个谜


无论如何,希望任何遇到此问题的人都可以尝试此方法,祝您好运。

循环的代码在哪里?
public class UploadProgressListener implements ProgressListener {

private HttpSession session;
private int percentDone = 0;
private long bytesRead;
private long contentLength;
private int items;

private static final Logger logger = Logger.getLogger(UploadProgressListener.class);

public UploadProgressListener(HttpSession session) {
    this.session = session;
    ProgressEntity entity = new ProgressEntity();
    session.setAttribute("upload_file", entity);
}

public void update(long bytesRead, long contentLength, int items) {

    ProgressEntity entity = (ProgressEntity) session.getAttribute("upload_file");

    entity.setBytesRead(bytesRead);
    entity.setContentLength(contentLength);
    entity.setItems(items);

    session.setAttribute("upload_file", entity);

    this.bytesRead = bytesRead;
    this.contentLength = contentLength;
    this.items = items;

}

public long getBytesRead() {
    return this.bytesRead;
}

}
public class ProgressUploadMultipartResolver extends CommonsMultipartResolver {

private HttpServletRequest request;
private static final Logger logger = Logger.getLogger(ProgressUploadMultipartResolver.class);

protected FileUpload newFileUpload(FileItemFactory fileItemFactory) {

    ServletFileUpload upload = new ServletFileUpload(fileItemFactory);
    upload.setSizeMax(-1);

    if(request != null) {
        HttpSession session = request.getSession();
        UploadProgressListener uploadProgressListener = new UploadProgressListener(session);
        upload.setProgressListener(uploadProgressListener);
    }

    return upload;
}

@Override
public MultipartHttpServletRequest resolveMultipart (HttpServletRequest request) throws MultipartException {
    this.request = request;
    return super.resolveMultipart(request);
}

@Override
public MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {
    HttpSession session = request.getSession();

    String encoding = "utf-8";
    FileUpload fileUpload = prepareFileUpload(encoding);

    UploadProgressListener uploadProgressListener = new UploadProgressListener(session);
    fileUpload.setProgressListener(uploadProgressListener);
    try {

        List<FileItem> fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);
        return parseFileItems(fileItems, encoding);

    } catch(FileUploadBase.SizeLimitExceededException e) {
        e.printStackTrace();
    } catch (FileUploadException e) {
        e.printStackTrace();
    }

    return null;
}

}
public class ProgressEntity {

private long bytesRead = 0L;
private long contentLength = 0L;
private int items;

public long getBytesRead() {
    return bytesRead;
}
public void setBytesRead(long bytesRead) {
    this.bytesRead = bytesRead;
}
public long getContentLength() {
    return contentLength;
}
public void setContentLength(long contentLength) {
    this.contentLength = contentLength;
}
public int getItems() {
    return items;
}
public void setItems(int items) {
    this.items = items;
}