Silverstripe 4.1.1 - не удается отправить форму после выполнения ajax-запроса - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть стандартная форма silverstripe, которая использует jquery validate для проверки требуемого поля. Мне нужно выполнить некоторую другую проверку перед отправкой формы, поэтому я использовал submithandler jquery validate для выполнения 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]:
IN POST {МОЯ ФОРМА URL}
Линия в
Трассировка
=====
SilverStripe \ Dev \ CliDebugView-> renderTrace ()
DetailErrorFormatter.php: 119

SilverStripe \ Logging \ DetailErrorFormatter-> output (404,,,,)
DetailErrorFormatter.php: 54

SilverStripe \ Logging \ DetailErrorFormatter-> 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 (); просто если это было причиной проблемы, но не радости.

* * +1039 Кроме того:

Насколько я понимаю, когда вы отправляете форму Silverstripe, вызывается исходный метод формы (тот, который генерирует форму), а затем вызывается метод действия формы.

Если я отображаю страницу формы в своем браузере, а затем добавляю оператор php die в конце метода формы, а затем отправляю форму, отображается сообщение die. Если я помещу сообщение die в начало метода действия формы, появится сообщение об ошибке выше.

Это означает, что проблема должна лежать, когда silverstripe пытается вызвать метод действия формы. Я не знаю, как это работает внутренне, но любые мысли будут с благодарностью.

...