我在提早退出JavaScript回调时遇到了问题

时间:2019-04-16 19:25:24

标签: javascript jquery angularjs ajax forms

问题

我有一个托管表单正在使用的回调。表单进行一些处理并在提交时构建一个对象,然后以该对象作为唯一参数调用回调。

该表单由javascript对象启动。启动表单对象后,它将在当前视图中设置一个iframe。该iframe包含所有html以及表单的内容。

以下所有代码都位于Angular 1.3.13 + asp.net应用程序中。

我的回调应该是将表单对象中的数据记录到数据库中。但是,当它开始向数据库设置POST请求时,回调突然结束。

代码

预设置步骤

在初始化托管表单之前,我需要从数据库中获取一些必要的数据。

$scope.setupForm = function(element, group) {
  app.groupSelected = group;
  return People.get(app.context, app.personId)
    .success(function(data, status) {
      person.groupId = data.groupId;
      /* insert pending grouping */
      insertPendingGrouping(data, person);
      /* generate grouping form */
      return generateGroupingForm(person);
    })
    .error(errorHandler);
};
上面引用的

app是一个保存会话数据的全局对象。我知道这不是处理会话数据的最佳方法,但是当前必须保留的代码已经存在。

因此People.get(context, personId)是一种有角度的服务,它使用$ http检索特定人的数据。

让我们进入generateGroupingForm(person)

生成表格

const generateGroupingForm = function(person) {
  // element to house the form object
  const formElement = $window.document.getElementById('grouping_form');
  /* get the form token */
  GroupingForm.getFormToken(app.context, app.personId, app.groupId, person)
    .success(function(data, status) {
      // tracking number for this grouping
      person.groupingNumber = data.groupingNumber;
      // form token
      person.groupingToken = data.token;
      // initiate the form
      formElement.gpf = new GroupingForm(data.token, formHandler);
    })
    .error(errorHandler);
};

const formHandler = function(groupingObject) {
  // log the grouping
  $scope().logGrouping(groupingObject);

  const status = $('#grouping-status');

  if (groupingObject.groupingStatus !== 'Complete') {
    // alert that an error occurred during grouping
  } else {
    // alert that grouping is successful
    // log that the grouping was successful
    // move view to completion page
  }
};

上面的代码应该发生什么:

  • 该应用获取表单令牌
  • 该应用启动分组表格
  • 用户提交分组表格(单击按钮)
  • formHandler被呼叫
  • $scope().logGrouping(groupingObject);被执行
  • 该视图会提醒用户状态
  • 托管表单关闭
  • 观点前进

这是实际发生的事情:

  • 该应用获取表单令牌
  • 该应用启动分组表格
  • 用户提交分组表格(单击按钮)
  • formHandler被呼叫
  • $scope().logGrouping(groupingObject);开始执行
  • 托管表单关闭
  • logGrouping过早退出

更多信息

所做的更改

在对应用程序进行更改之前,将formHandler放入html脚本视图中的脚本标签中,并且generateGroupingForm中的ajax调用(angular。$ http调用)是一个jQuery。 ajax调用。

我添加了Person角度服务,因此之前没有记录待处理的分组。

在托管表单上

托管表单是我工作中一些旧商业惯例的产物,并且允许我们不同的产品与我们的API之一进行交互。长话短说,我不能放弃使用此托管表单。

编辑

每个@georgeawg,我已经从使用.success() / .error()切换到.then() / .catch(),但是我仍然面临上述问题。该问题似乎与与使用.success() / .error()有关的问题分开。

最终编辑

我实际上找到了我遇到的问题的根源。长话短说,位于链中更远的地方,应该添加到groupObject的对象实际上并未添加。解决此问题后,问题就解决了。是让我们绊倒的小事。

0 个答案:

没有答案