POST请求导致GET调用无响应

时间:2013-08-02 15:09:53

标签: javascript jquery html

我有一个与使用POST下载文件相关的问题。

我有以下javascript向服务器端发送POST请求以下载文件:

function postCall(url, params) {
    function doPostCall() {
    var newForm = jQuery('<form>', {
        'method':'POST',
        'action': url
    });

    for(key in params) {
        if (params.hasOwnProperty(key)) {
            newForm.append(jQuery('<input>', {
                'name': key,
                'value': params[key],
                'type': 'hidden'
            }));
        }
    }
    newForm.appendTo("body").submit();
}

从HTML页面的不可见iframe调用此方法。此页面还有另一个正常的GET请求来获取静态HTML。但是,每次调用上述方法时,获取静态页面的调用永远不会从服务器端返回。

我知道用这么少的信息来理解它有点难以理解,但代码很庞大,很难被放到这里。我的问题是:

  1. 上面的代码是否有任何明显的问题,使用不可见的表单发送POST请求来获取文件?
  2. 是否有其他更好的方法可以向服务器发送POST请求以下载文件。 (人们告诉Ajax调用不能用来下载文件)?
  3. 如果此代码正常,则没有其他可用方法。无论如何强制这个方法在加载整个页面并完成所有其他请求后最后一次运行?

1 个答案:

答案 0 :(得分:0)

  1. GET请求中的描述不是很清楚,不是从同一个iframe发送的。是的,然后在提交表单之后重新加载iframe内容 - 因为它不是AJAX请求 - 停止在iframe中运行的所有其他javascript代码。

  2. 好吧,您可以在表单中添加'target =“_ blank”'属性 - 在这种情况下,iframe内容不会在表单提交时重新加载。

  3. 是的,很有可能。 jQuery.ajax方法返回Deferred对象。因此,您可以将这些延迟对象存储在数组变量中,并等待所有延迟已解决。然后运行POST提交。 jquery.whenAll插件可以简化此任务:

    jQuery.whenAll(
      $.get( URL1 ),
      $.get( URL2 )
    )
    .always(function(results) { postCall(url, params) });