JQuery AJAX请求在完成之前重定向

时间:2018-04-06 13:18:12

标签: javascript jquery ajax

我有两台服务器:服务器A和服务器B.

服务器A是一个中央服务器,其Web服务可以调用服务器B上的某些Web服务,执行一些额外的工作并返回所需的结果。

服务器B(OpenText Content Server)上有一些自定义javascript,可执行以下操作:

在加载时,进行AJAX POST以获得"表格"显示。表单以HTML格式返回,并在成功发生时呈现在页面上。这是代码:

function load(ID)
{
    $.ajax({
    type:"POST",
    url:[REMOVED],
    data:"<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><LoadForm xmlns='http://tempuri.org/'><ID>" + ID + "</ID></LoadForm></soap:Body></soap:Envelope>",
    contentType:"text/xml", 
    success: render });
}

function render(data, status, jqHXR)
{
    $(fc)[0].innerHTML = data.documentElement.getElementsByTagName("LoadFormResult")[0].textContent;
}

加载页面时,上面的请求可以正常运行并将HTML呈现到页面上。该内容包括一个按钮,按下该按钮会触发另一个AJAX请求。

我尝试了多种不同的重定向方式... location.path,location.href,location.replace,location,history.push,并且都经历了相同的行为。

我也尝试了重定向,而不是完成,甚至重定向到谷歌。

以下是代码:

$.ajax({
    type:"POST",
    url:[REMOVED],
    data:"<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><CreateFolder xmlns='http://tempuri.org/'><parentID>" + parentID  + "</parentID><folderDisplayName>" + folderDisplay + "</folderDisplayName><ID>" + ID + "</ID><Info>" + InfoStr + "</Info><inherit>" + inherit + "</inherit><username>" + currUser + "</username></CreateFolder></soap:Body></soap:Envelope>",
    contentType:"text/xml",
    success: goToFolder,
    error: function(d,s,j) { alert("failed"); },
    complete: function(d,t) { location.replace('[REMOVED]'); }
});

当我在IE中使用fiddler和网络监视器进行监视时,我看到以下行为:

  1. 页面加载没有问题(调用第一个AJAX请求)
  2. 内容被填写并按下按钮以生成文件夹。
  3. 首先对Web服务进行OPTIONS调用,返回200状态。
  4. 该页面收到302到Content Server的根目录
  5. 对Web服务进行POST调用,该服务也返回200(并且有效)
  6. 到目前为止,该页面已重定向回网站的根目录。成功,错误,在AJAX请求中完成永远不会被执行。
  7. 如果我在导致问题的AJAX请求结束时发出警报,并等待该警报阻止脚本;我看到成功/完成调用函数(适当地将页面重定向到所需位置)

    非常感谢任何协助。

    编辑:其他信息:

    当点击执行AJAX请求的页面上的按钮时,以下内容显示在Fiddler中。

    选项http://mywebservice/ws/service?op=myOperation HTTP / 1.1 *返回STATUS 200 OK 获取http://contentserver/otcs/cs.exe *返回STATS 302重定向(文档已移动) POST http://mywebservice/ws/service?op=myOpertaion HTTP / 1.1 *返回STATUS 200

    由于AJAX在POST回来之前不会响应成功/完成,因此JavaScript不会执行。警报必须阻止发生GET请求。不知道GET请求来自哪里。

    谢谢!

0 个答案:

没有答案