2010-02-08 196 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