2010-02-08 194 views
2

即時通訊想要實現的是如果出現錯誤(我已經提出了一個錯誤)幷包含單詞'錯誤',然後該函數停止在它的軌道。什麼功能基本上由5個Ajax請求,當一個人成功地在其他踢..像這樣..jQuery - 停止功能

function thing() { 
    $.ajax({ 
     ... 
     ... 
     success: 
     function(html){ 
      errorGet(html); 
      $.ajax({ 
      ... 
      ... 
      success: 
      function(html){ 
       errorGet(html); 
        ... 
       ... 

我有一個函數來代替「errorGet()」試圖阻止的功能;

function errorGet(data){ 
    var re = /error/mgi; 
    if(data.search(re) == 0){ 
     thing.stop; 
    } 
} 

但我知道thing.stop does not工作,但沒有人知道如何停止該過程?

+0

我認爲沒有辦法破壞父母功能。 – 2010-02-08 16:04:50

+0

似乎有一個更大的問題,正則表達式不起作用...嗯,不能看到爲什麼壽。 – 2010-02-08 16:16:31

+0

你確定(通過Firebug)「錯誤」真的在響應體中嗎?無論如何,我會親自使用「/error/mi.test(data)」,它返回true或false;你並不需要「g」標誌。 – Pointy 2010-02-08 16:27:48

回答

2

您是否嘗試過拋出異常?

throw "there was an error so I am going to stop"; 
5

你可以有一個函數調用你的AJAX請求而不是異步的。這種方式不必被網絡化,你只需要return就可以退出該功能。

function thing() { 
    var stop = false; 

    $.ajax({ 
     async: false, 
     ... 
     success: 
     function(html){ 
      stop = errorGet(html); 
     } 
    } 

    if(stop) { 
     return false; 
    } 

    $.ajax({ 
     async: false, 
     ... 
     success: 
     function(html){ 
      stop = errorGet(html); 
     } 
    } 
} 

function errorGet(data){ 
    var re = /error/mgi; 
    if(data.search(re) == 0){ 
     return false; //no error 
    } 
    return true; 
} 
+0

這不起作用,因爲ajax機制將在HTTP請求完成之前返回,因此在「成功」回調中進行錯誤檢查之前會返回。換句話說,在errorGet函數被調用之前,代碼將會進入「if(stop)」點。 – Pointy 2010-02-08 16:15:09

+1

尖尖的,它會等待$ .ajax()完成,因爲它是同步的(async:false)。聽起來像是一條路。 – parserr 2010-02-08 16:27:14

+0

Oh durrr。抱歉! – Pointy 2010-02-08 16:35:31