SilverStripe自定义电子邮件表单-jQuery.ajax不将变量传递给服务器 - php

我正在尝试为SilverStripe网站构建一个自定义电子邮件表单,该站点包含jQuery,HTML,PHP和SilverStripe API,并且一直坚持尝试将表单字段传递到服务器端。而且,请不要为表单插件提供任何建议-表单是按原样设置的,我不会花很多时间来重做它。

以下是获取表单数据并将其发送到服务器的功能:

function ajax_script() {
  var form_data = {
    firstname: SchFirstName.val(),
    lastname: SchLastName.val(),
    useremail: SchEmail.val(),
    birthday: SchBirthday.val(),
    phone: SchPhone.val(),
    servicereq: SchService.val(),
    location: SchLocation.val(),
    doctor: SchDoctor.val(),
    calltime: SchTime.val()
  };
  $.ajax({
    type: "POST",
    url: "/home/ScheduleAppointment",
    data: form_data,
    success: function(response) {
      console.log(response);
    }
  });
}

这是Page.php控制器中的ScheduleAppointment函数:

public function ScheduleAppointment() {
     $fname = $this->getRequest()->param('firstname');
     $lname = $this->getRequest()->param('lastname');
     $birthday= $this->getRequest()->param('birthday');
     $useremail= $this->getRequest()->param('useremail');
     $phone = $this->getRequest()->param('phone');
     $servicereq = $this->getRequest()->param('servicereq');
     $location = $this->getRequest()->param('location');
     $doctor = $this->getRequest()->param('doctor');
     $calltime = $this->getRequest()->param('calltime');

     $from = '[hidden]';
     $to = '[hidden]';
     $subject = 'Appointment Request Submission';

     $body = "First Name: ".$fname."\r\n"."Last Name: ".$lname."\r\n"."Date of Birth: ".$birthday."\r\n"."Phone Number: ".$phone."\r\n"."Email: ".$useremail."\r\n"."Best Time to Call: ".$calltime."\r\n"."Location/Hospital: ".$location."\r\n"."Physician: ".$doctor."\r\n"."Service Requested: ".$servicereq."\r\n" ";

     $email = new Email($from, $to, $subject, $body);
     $email->replyTo($useremail);

     $email->send();
}

我已经尝试调试表单,并且可以看到所有变量都是null$fname$lname$birthday等),所以有些不对劲。 jQuery.ajax功能有问题或this->getRequest()->param()设置正确。

如果有人对如何解决此问题有任何建议,我将不胜感激。我已经努力解决了几个小时的问题,而现在我很困惑。

参考方案

正如史蒂夫在评论中指出的那样:

$this->request->param('foo'); 

是错的。用于从URL参数中获取内容,例如$ Action,$ ID或您在路由或$url_handlers(see docs)中定义的任何内容

要获取POST变量,您需要致电:

$this->request->postVar('foo');

要同时获取POST或GET变量,您可以调用:

$this->request->requestVar('foo');

See docs

jQuery Ajax加载仅适用于单个单词变量 - php

在我的PHP文件中,我将一些变量从输入框传递到链接中,该链接通过jQuery的ajax load函数在其URL中使用该变量加载页面。整个系统运行良好,但仅适用于单字变量。每当涉及到空格时,我的Ajax通话都会中断。我假设这是一个编码问题,但是我也有一些疑问。基本上,它归结为我的PHP文件中的这一行代码,这导致了混乱。是否有可能找出格式是否正确,或者为什么在多…

jQuery .ajax将整个JavaScript数组传递给PHP - php

tdata = new Array(); tdata['id'] = "helloid"; tdata['name'] = "helloname"; tdata['location'] = "hellolocation"; tdata[&#…

使用PHP变量将多个参数传递给AJAX JQuery - php

我试图将2个值传递给AJAX JQuery函数。我的函数是由下拉列表的onChange触发的,该列表从数据库获取数据并通过while循环运行,并使用PHP输出,如下所示:$dropDown = "<label for='drop_down_list'>Drop Down: </label> <sel…

jQuery-找不到Ajax网址 - php

好的,我敢肯定这确实很容易,而且我很愚蠢,但是似乎并不能深入了解它。我试图从我的js文件“ custom.js”中对“ helpers.php”中的某些代码进行简单的AJAX调用。但是,我仍然收到404错误,因为我似乎并没有正确遍历文件夹,尽管我确信我正在...我的文件夹结构如下:html index.php js/ custom.js includes h…

jQuery AJAX不向PHP发送多个提交按钮 - php

所以我的问题是,当我将表单提交到PHP时,使用jQuery通过AJAX提交表单时,使用jQuery AJAX时哪个按钮提交表单并不重要,但是当使用表单操作时,表单会提交并让我知道删除还是删除按下了更新按钮。例如,这是提交表单的HTML<input type="submit" name="update" value…