如何在将响应值传递给另一个函数之前专门修改响应值的第一个索引 [0]?

How to modify specifically the very first index[0] of response value before it gets passed to another function?

我目前有这个 ajax 请求,它运行一个嵌入 Tableau 视图的函数。然后,我插入安全令牌,以便用户在访问此站点时无需再次登录 Tableau 即可访问 Tableau 报告。

我的过程是,当我收到来自数据库的响应时,我注入了安全令牌,然后我查找关键字 'ticket' 以将安全令牌添加到其中。在 response[0] 不包含关键字 'ticket' 之前,它可以完美运行,这意味着我需要将该关键字添加到 response[0] 中,然后才能传递给下一个函数。

这是我的尝试:response[0].TReports[0].url.replace('server/views','server/trusted/ticket/views');

但是下一个函数运行的时候,response不是修改过的那个。如何接收修改后的'response[0]'?

  $.ajax({
         type: 'POST',
          url: _config.GetHeadersByClientAPI,
          dataType: 'json',
         contentType: 'application/json',
          data: JSON.stringify(data),
          success: function (response) {
          var vizArray = [];
          var items = '';
response[0].TReports[0].url.replace('server/views','server/trusted/ticket/views');   //This is my attempt to edit the value, however it is modifying what it is //being passed to the next forEach. 
         
                        response.forEach(function (data) {
                            vizArray[data] = data;
          var trustedticket=ticket;
                            var header = vizArray[data].THeaderTitle;
                            var header_id = vizArray[data].THeaderTitle.replace(" ", "");
                            var reports = vizArray[data].TReports;
          
                            $('#report-group-title').append("<a href='#" + header_id + "' class='list-group-item d-inline-block collapsed' data-toggle='collapse' data-parent='#sidebar' aria-expanded='false'><i id='h' class='fa fa-book'></i> <span class='d-none d-md-inline'>" + header + " </span></a>   <div class='collapse' id='" + header_id + "'></div >");
                            items += "<a href='#" + header_id + "' class='list-group-item d-inline-block collapsed' data-toggle='collapse' data-parent='#sidebar' aria-expanded='false'><i id='h' class='fa fa-book'></i> <span class='d-none d-md-inline'>" + header + " </span></a>   <div class='collapse' id='" + header_id + "'></div >";
                            var list = '';
                            $.each(reports, function load(j) {
                                vizArray[j] = reports[j]
                                var name = vizArray[j].name;
                                var url = vizArray[j].url.replace("ticket",trustedticket); //Here I inject my security //token
           
                                var hash = vizArray[j].hash;
                                var vizOptions = {
                                    showTabs: true,
                                    hideToolbar: true
                                };
           
                                var vizDiv = document.createElement('div');
                                vizDiv.id = hash + 'Viz';
                                document.getElementById('vizes').appendChild(vizDiv);
                                reports.viz = new tableauSoftware.Viz(
                                    document.getElementById(hash + 'Viz'),
                                    url,
                                    vizOptions
                                )
                                console.log(name);

String.replace 是非变异的。

考虑以下代码:

var a = "foobar";
a.replace("foo", "bar");
console.log(a); // "foobar"

很容易看出 replace 没有改变 a,而是返回包含 "barbar" 的操作字符串,这正是替换函数改变 a.

相反,您可以这样做:

a = a.replace("foo", "bar");

这会将变异值分配给 a.

你的情况:

response[0].TReports[0].url = response[0].TReports[0].url.replace('server/views','server/trusted/ticket/views');