" .replace()不是函数"当试图在ajax里面成功使用时

时间:2017-05-18 22:59:17

标签: javascript jquery

这就是我正在做的事情:

math

这是错误:

  

未捕获的TypeError:supervisors.replace不是函数

如果我这样做:

math = input('Enter division or multiplication: ')

屏幕上的结果是:

    function AddSupervisor()
    {
        var employeeID = $('#ID').val();
        var supervisorId = $('#SupervisorId').val();
        var supervisors = '';
        if (supervisorId > 0)
        {
            $.ajax({
                url: '@Url.Action("AddSupervisor", "Contact")',
                type: 'GET',
                dataType: 'json',
                data: { EmployeeID: employeeID, SupervisorID: supervisorId  },
                success: function(data) {
                    supervisors = data;
                    $('#divSupervisorList').text(supervisors.replace(",", "<br />"));
                },
                error: function(data) {

                }
            });
        }
    }

我想要的是:

$('#divSupervisorList').text(data);

但我在使用John Foo, Jane Bar 替换John Foo Jane Bar 时遇到问题。起初我试过了:

,

当那个没有用的时候,我开始使用在ajax调用之前声明的字符串。我也尝试使用<br />,但也遇到了同样的错误。

不确定我做错了什么。

更新

正如许多人所指出的,我的返回数据不是字符串,而是一个对象:

$('#divSupervisorList').text(data.replace(",", "<br />"));

所以,现在我要弄清楚如何将这个数组拆分成一个字符串: - )

4 个答案:

答案 0 :(得分:1)

我的猜测是data param实际上是一个数组,而不是一个字符串,你只能用逗号来看它,因为JS偷偷地将它串行化。您可以使用数组的join方法将它们组合在一个字符串中:

supervisors.join('<br />')

但是,如果您尝试在jQuery的"<br />"函数中使用text,它将被转义。您可以改用html功能。所以,

$('#divSupervisorList').html(supervisors.join('<br />'));

答案 1 :(得分:0)

要替换数组每个成员中的逗号,您需要在数组值上映射.replace()

let result = data.map(function(o){return o.replace(',','<br />')});

要加入数组成员,用<br />分隔它们,您需要.join()

let result = data.join('<br />');

请注意,没有实际的逗号分隔数组成员,这只是一种显示数组值的传统方式,因此人们可以阅读和理解它们,但没有什么可以替代的。您需要做的就是使用您选择的分隔符(<br />)加入成员,默认情况下,这是一个逗号。

所以这也会给你相同的结果:

let result = data.join().replace(',','<br />');

...因为.join()会使用,粘贴字符串,而.replace()会用<br />替换它们。

答案 2 :(得分:0)

您回复的数据是Json而不是字符串。

 function AddSupervisor()
{
    var employeeID = $('#ID').val();
    var supervisorId = $('#SupervisorId').val();
    var supervisors = '';
    if (supervisorId > 0)
    {
        $.ajax({
            url: '@Url.Action("AddSupervisor", "Contact")',
            type: 'GET',
            dataType: 'json',
            data: { EmployeeID: employeeID, SupervisorID: supervisorId  },
            success: function(data) {
                supervisors =JSON.stringify( data);
                $('#divSupervisorList').text(supervisors.replace(",", "<br />"));
            },
            error: function(data) {

            }
        });
    }
}

阅读更多: [https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify]

答案 3 :(得分:-1)

根据the jQuery docs

  

[dataType is]&#34; json&#34;:将响应评估为JSON并返回JavaScript对象

因此,data实际上是object。您需要访问相关的字符串属性,例如data.supervisors.replace(...) - 取决于您的对象模型。

我建议您通过 F12 调查问题来源,为您的成功回调添加console.log(data)次调用并检查浏览器中的开发者控制台。

更新:上述console.log调用的输出提示data是一个数组。因此,您需要替换

$('#divSupervisorList').text(data.replace(",", "<br />"));

$('#divSupervisorList').html(data.join("<br />"));