如何在Javascript中触发一个函数

时间:2018-04-09 11:24:47

标签: javascript java jquery

如果用户没有输入正确的字符串,则尝试失败。 很好

我唯一的问题是我想将异常发送到ajax中的error函数。 ATM正在向它发送成功。

如何触发某种错误,以便将其发送到ajax中的错误函数?

public static String call(String input) {

    try {
        //doesn't matter. it will fail this try

        }
    } catch (Exception e) {
        return e.getMessage(); // I want to send this to the error function in ajax
    }
    return "Good job";
}

AJAX

$.ajax({
      url: '/call',
      type: 'get',
      data: {input: input},
      success: function (resultString) {
          //it sends to here instead of error
      },
      error: function () {
          // i want to see it here
      }
  })

3 个答案:

答案 0 :(得分:1)

这个问题依赖于用例,因为正确答案取决于错误类型,业务规则和其他因素,如信息曝光..但要尝试向您发送正确的方向,您需要发送HTTP错误代码,可能是https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400

中的400

这是一个servlet如何做到的例子(这也是依赖于案例的,因为使用的方法取决于你的后端技术):

catch ( MalformedFileUriException e ) {
            response.setStatus( HttpServletResponse.SC_BAD_REQUEST );
            log.warn( "...", e );
        }
        catch ( UnsupportedLocaleException e ) {
            response.setStatus( HttpServletResponse.SC_BAD_REQUEST );
            log.warn( "...", e );
        }
        catch ( Exception e ) {
            response.setStatus( HttpServletResponse.SC_INTERNAL_SERVER_ERROR );
            log.error( "...", e );
        }

答案 1 :(得分:0)

public static String call(String input) {

    try {
        //doesn't matter. it will fail this try

        }
    } catch (Exception e) {
        echo json_encode(array("status"=>false,"msg"=>e.getMessage())); // I want to send this to the error function in ajax
    }
    echo json_encode(array("status"=>true,"msg"=>"Good job"));
}

JS

$.ajax({
      url: '/call',
      type: 'get',
      data: {input: input},
      success: function (resultString) {
          var d = $.parseJSON(resultString);
          if(d.status){
          //do stuff
          }else{
          alert(d.msg);//Your alert message
          }
      }
  })

AJAX没有捕获服务器在错误函数中抛出的错误。您需要手动执行此操作以让AJAX知道它是成功还是错误。您需要使用json_encode并将状态设置为true或false。

检查您的AJAX,如果状态为false,则表示从服务器抛出错误。

PS - 我不知道JAVA中的json_encode语法,所以我使用了PHP的语法。请更换它。但是你会从中得到这个想法。

答案 2 :(得分:0)

当AJAX调用成功完成或失败时,会执行ajax 成功 错误 。所以基本上它并不关心你从后端返回什么结果。如果您的后端无法返回任何数据,则只有AJAX才会遇到 ERROR 块。因此,如果您想要区分返回数据的try块和返回数据的错误块,则必须在AJAX的 success 部分中应用一些逻辑。 所以我的方法是将数据作为文本和值的列表而不是字符串发送。当后端从try块返回数据时,可以将[text]部分设置为“OK”,否则在catch块返回的情况下可以将[text]块设置为“Error”。列表的[Value]将是所需的值。 所以结论使用list<>代替字符串作为返回类型,并根据需要设置[Text]和[Value]字段。