2017-05-18 68 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]

相關問題