2017-05-18 67 views
1

这是我在做什么:试图ajax的成功里面使用时,“.replace()是不是一个函数”

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) { 

       } 
      }); 
     } 
    } 

这是错误:

Uncaught TypeError: supervisors.replace is not a function

如果我这样做这样的:

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

的结果在屏幕上是这样的:

John Foo, Jane Bar 

我要的是:

John Foo 
Jane Bar 

但我无法用<br />更换,。起初,我尝试过:

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

而当没有工作,我去使用一个字符串,在ajax调用之前声明。我也尝试使用.split(),但得到了同样的错误。

不知道我在做什么错。

UPDATE:

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

(4) ["Adam Brown", "Karl Walser", "Jeremy Smith", "Nathan Graham"] 
0 : "Adam Brown" 
1 : "Karl Walser" 
2 : "Jeremy Smith" 
3 : "Nathan Graham" 

所以,现在我得弄清楚如何将这种阵列分成字符串:-)

+2

确保数据是一个字符串。如果数据是一个object/array/null/undefined,则替换函数对于它们中的任何一个都不存在。 – adelineu

+0

'dataType:'json',',尝试在替换之前使用'.toString()'? – Hodrobond

回答

0

根据the jQuery docs

[dataType is] "json": Evaluates the response as JSON and returns a JavaScript object

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

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

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

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

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

好的建议!查看编辑中的结果给我的操作。 –

+0

将.text改为.html,这将是正确的答案!我也打败了你,但仅仅因为你的帮助:-) –

+1

@Casey,等等,什么?你试图替换分隔数组值的逗号吗?这些逗号***不存在***它们是数组可视化的约定。事实上,数组是一堆有序的项目,在你的案例中有一些字符串。那里没有真正的逗号!我以为你试图替换名称内的逗号... –

1

我的猜测是,data PARAM实际上是一个数组,而不是一个字符串,你用逗号看到它,只是因为JS是鬼祟以这种方式进行字符串化。你可以在字符串中使用join方法阵列组合他们,但是

supervisors.join('<br />') 

,如果你试图在jQuery的text功能使用"<br />",它会被逃脱。您可以改用html函数。所以,

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

*偷偷摸摸* ...!? ¯\ _(ツ)_ /¯。喜欢这个词。 'NaN!= NaN'。 :) –

0

要更换你的阵列中的每个成员内部逗号,你需要地图上的数组值.replace()

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

要加入阵列的成员,他们用<br />分离,你需要.join()

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

注意有没有实际的逗号分隔阵列成员,这只是显示阵列值,以便呜呜的传统方式ans可以阅读并理解它们,但没有什么可以替代。所有你需要做的就是加入你选择的分隔符(<br />),默认情况下是逗号。

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

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

...因为.join()会使用,.replace()将与<br />小号取代它们胶字符串。

+0

这有点奇怪。第一次(当没有逗号时)它工作正常。但是一旦有逗号(多个值),我得到这个:'9:1未捕获的SyntaxError:意外的令牌<位于13号的JSON中' –

+0

好吧,它明显地破坏了JSON。我猜你的'data'有一个'response'或'result'属性,它实际上保存了你想运行替换的内容。没有看到它,我只能猜测。用'(data.result)'或'(data.response)'替换'(data)'。 –

+0

是。请参阅更新。 –

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]

相关问题