【问题标题】:Empty response from XHR来自 XHR 的空响应
【发布时间】:2023-03-25 18:32:01
【问题描述】:

我有一个表格,在用户过滤后由结果填充。每个结果都会将用户带到一个详细信息页面。我希望用户在不重置表格的情况下返回搜索结果。详细信息页面上的“返回结果”按钮包含以下 JavaScript:

document.getElementById('back').onclick = function(e){
const newpage = window.open("index.html?fromDetail=yes", "_self");
newpage.onload = advancedSearchFromDetail()
}

这是到达目标页面后执行的 JavaScript 函数:

function advancedSearchFromDetail () {
    event.preventDefault()
                    var table = $('#mainTable').DataTable()

                    table.clear()

        // Get the parameters in the sessionStorage       
        const pe1id = sessionStorage.getItem('pe1id');
        const pe2id = sessionStorage.getItem('pe2id');
        const plid = sessionStorage.getItem('plid');
        const dateFrom = sessionStorage.getItem('dateFrom');
        const dateTo = sessionStorage.getItem('dateTo');
        const includeUndated = sessionStorage.getItem('includeUndated');

        const data = new FormData() 
        data.append('pe1id', pe1id)
        data.append('pe2id', pe2id)
        data.append('plid', plid)
        data.append('dateFrom', dateFrom)
        data.append('dateTo', dateTo)
        data.append('includeUndated',includeUndated)

        const oReq = new XMLHttpRequest();
        oReq.open("post", 'modules/advanced_search.xq', true);
        oReq.send(data);

        oReq.onreadystatechange = function () {
            if (oReq.readyState === XMLHttpRequest.DONE && oReq.status === 200) {
                const result = JSON.parse(oReq.responseText);
                [populate the table]

                }

              } 

奇怪的是,这段代码在从主页启动时可以工作。所有参数都在那里并正确发送。然而,响应是空的,空白的。如果我双击浏览器控制台中的 XHR 详细信息以打开带有参数的 .xq 文件,我什至会在新页面中获得 JSON 结果!我在看什么?如果参数在那里,XHR 调用在那里,我得到 200 状态等等,我不明白为什么它不起作用。

编辑

如果我在浏览器的控制台中启动该功能,它就可以工作。这是否与我用newpage.onload = advancedSearchFromDetail() 调用该函数的事实有关?如果是,我该如何解决?

【问题讨论】:

    标签: javascript datatable xmlhttprequest


    【解决方案1】:

    好的,正如我所怀疑的,问题似乎在于我如何调用该函数,即通过 .onload 指令。因此,如果用户来自“详细”页面,我在 URL 中附加了一个参数,并在主页中添加了这个 JavaScript:

    var urlParams = new URLSearchParams(window.location.search);
    if (urlParams.has('fromDetail')) {
    advancedSearchFromDetail()}
    

    我已经删除了之前 JavaScript 中的 .onload 指令。我不确定这是最好的解决方案,如果有人有更好的解决方案,请在此处发表评论。

    【讨论】:

      猜你喜欢
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      相关资源
      最近更新 更多