Silverstripe 4.1.1-执行ajax请求后提交表单失败

时间:2018-11-12 14:06:50

标签: javascript php jquery ajax silverstripe

我有一个标准的silverstripe表单,该表单使用jquery validate来验证必填字段。我需要在提交表单之前执行其他一些验证,因此使用了jquery validate的commithandler来执行ajax请求,如果返回成功结果,请按照以下代码提交表单:

$('form').validate({
     rules: {
              {**MY FIELD RULES**}
     },
     submitHandler: function(form) {
              $.ajax({
                       url: {**MY URL**},
                       success: function(response) {
                                var resp = JSON.parse(response);
                                if(resp.ErrorMessage == '') {
                                         form.submit();
                                } else {
                                         alert(resp.ErrorMessage);
                                }
                       },
              });
     }
});

使用上面的代码提交表单时,将调用Ajax函数并正确返回,但是,提交表单时,我会收到以下消息:

  

错误[未知类型,错误404]:
  发布后{MY FORM URL}
    进入
    跟踪
    =====
    SilverStripe \ Dev \ CliDebugView-> renderTrace()
    DetailedErrorFormatter.php:119
  
     SilverStripe \ Logging \ DetailedErrorFormatter-> output(404,,,,,)
     DetailedErrorFormatter.php:54
  
     SilverStripe \ Logging \ DetailedErrorFormatter-> format(Array)
     HTTPResponse.php:355
  
     SilverStripe \ Control \ HTTPResponse-> outputBody()
     HTTPResponse.php:283
  
     SilverStripe \ Control \ HTTPResponse-> output()
     index.php:26

但是,如果我像这样将表单提交放在ajax调用之前:

$('form').validate({
     rules: {
              {**MY FIELD RULES**}
     },
     submitHandler: function(form) {
             form.submit();
             $.ajax({
                       url: {**MY URL**},
                       success: function(response) {
                                var resp = JSON.parse(response);
                                if(resp.ErrorMessage == '') {
//                                             form.submit();
                                } else {
                                         alert(resp.ErrorMessage);
                                }
                       },
              });
     }
});

表单提交正常工作。

我在这个项目中确实有自定义路由,但是我认为这不是问题的原因,因为表单提交在第二个示例中有效。但是,routing.yml如下:

---
Name: myproject
---
SilverStripe\Core\Manifest\ModuleManifest:
  project: mysite
SilverStripe\SiteConfig\SiteConfig:
  extensions:
    - SalonVision\SalonVision\SiteConfigExtension
---
Name: modelascontrollerroutes2
Before: 
  - '#modelascontrollerroutes'
After:
  - '#adminroutes'
  - '#graphqlroutes'
---
SilverStripe\Control\Director:
  rules:
    '$Salon/$Location/$URLSegment//$Action/$ID/$OtherID': 'SalonVision\SalonVision\CModelAsController'

,我正在使用$ form-> setFormAction($ location-> baseLocationURL()。$ form-> FormAction());将正确的$ Salon / $ Location添加到操作URL。

我尝试用$ form-> disableSecurityToken()禁用安全令牌;以防万一是造成问题的原因,但不是欢乐。

此外:

据我了解,当您提交Silverstripe表单时,将调用原始表单方法(生成表单的方法),然后调用表单操作方法。

如果我在浏览器中显示表单页面,然后在form方法的末尾添加php die语句,然后提交表单,则会显示die消息。如果将die消息放置在form action方法的开头,则会显示上面的错误。

这意味着问题必须出在Silverstripe尝试调用form action方法时。我不知道这是如何内部运作的,但是任何想法都将不胜感激。

0 个答案:

没有答案