Javascript 需要联系表单后端,提供前端

Javascript 需要联系表单后端,提供前端,javascript,html,ajax,forms,contact,Javascript,Html,Ajax,Forms,Contact,我曾经在carrd.co网站上用pro plus计划主持过一个网站。我之所以选择这个昂贵的计划,是因为有可能下载网站并将其托管在自己的服务器上 我不知道的是,这不包括服务器端代码 我的问题是,我有前端代码,但我尝试的每一个PHP代码都无法与此代码交互。因为我只能用Java开发,所以我自己无法找到解决方案 问题是,我不知道下一步是什么,使此代码在我的服务器上工作,以便它在用户提交此表单时成功向我发送电子邮件。我没有任何后端代码,也不知道从哪里开始 1) 在哪里可以放置PHP文件来响应此请求?我该怎

我曾经在carrd.co网站上用pro plus计划主持过一个网站。我之所以选择这个昂贵的计划,是因为有可能下载网站并将其托管在自己的服务器上

我不知道的是,这不包括服务器端代码

我的问题是,我有前端代码,但我尝试的每一个PHP代码都无法与此代码交互。因为我只能用Java开发,所以我自己无法找到解决方案

问题是,我不知道下一步是什么,使此代码在我的服务器上工作,以便它在用户提交此表单时成功向我发送电子邮件。我没有任何后端代码,也不知道从哪里开始

1) 在哪里可以放置PHP文件来响应此请求?我该怎么命名呢

2) 如何解析参数

3) 如何将php脚本中的答案格式化为ajax脚本

你们能帮忙吗?非常感谢

(如果您不愿意提供完整的解决方案,我甚至可以通过一些好的提示来解决这个问题!感谢您的建议!)

前端代码:

表格:


发送消息
脚本:

function form(id, settings) {
var _this = this;
this.id = id;
this.mode = settings.mode;
this.method = settings.method;
this.success = settings.success;
this.preHandler = ('preHandler' in settings ? settings.preHandler : null);
this.failure = ('failure' in settings ? settings.failure : null);
this.optional = ('optional' in settings ? settings.optional : []);
this.$form = $('#' + this.id);
this.$form.addEventListener('submit', function (event) {
    _this.submit(event);
});
this.$form.addEventListener('keydown', function (event) {
    if (event.keyCode == 13 && event.ctrlKey) {
        event.preventDefault();
        event.stopPropagation();
        _this.submit(event);
    }
});
var x = $('#' + this.id + ' input[name="' + settings.hid + '"]');
if (x) {
    x.disabled = true;
    x.parentNode.style.display = 'none';
}
this.$submit = $('#' + this.id + ' button[type="submit"]');
this.$submit.disabled = false;
};form.prototype.notify = function (type, message) {
if (message.match(/^(#[a-zA-Z0-9\_\-]+|[a-z0-9\-\.]+:[a-zA-Z0-  9\~\!\@\#$\%\&\-\_\+\=\;\,\.\?\/\:]+)$/)) location.href = message; else alert((type == 'failure' ? 'Error: ' : '') + message);
}; 

form.prototype.submit = function (event) {
var _this = this, result, handler, fd, k, x, $f, $ff;
event.preventDefault();
if (this.$submit.disabled) return;
result = true;
$ff = this.$form.elements;
for (k in $ff) {
    $f = $ff[k];
    if ($f.type != 'text' && $f.type != 'email' && $f.type != 'textarea' && $f.type != 'select-one') continue;
    if ($f.disabled) continue;
    if ($f.value === '' || $f.value === null) {
        if (this.optional.indexOf($f.name) !== -1) continue;
        result = false;
    } else {
        x = '';
        switch ($f.type) {
            case 'email':
                x = "^([a-zA-Z0-9\\_\\-\\.\\+]+)@([a-zA-Z0-9\\-     \\.]+)\\.([a-zA-Z]+)$";
                break;
            case 'select':
                x = "^[a-zA-Z0-9\\-]$";
                break;
            default:
            case 'text':
            case 'textarea':
                x = "^[^\\<\\>]+$";
                break;
        }
        result = result && $f.value.match(new RegExp(x));
    }
    if (!result) break;
}
if (!result) {
    this.notify('failure', 'Missing and/or invalid fields. Please try again.');
    return;
}
if (_this.method == 'get') {
    _this.$form.submit();
    return;
}
if (x = $(':focus')) x.blur();
this.$submit.disabled = true;
this.$submit.classList.add('waiting');
handler = function (values) {
    var x, k, data;
    data = new FormData(_this.$form);
    if (values) for (k in values) data.append(k, values[k]);
    x = new XMLHttpRequest();
    x.open('POST', ['', 'post', _this.mode].join('/'));
    x.send(data);
    x.onreadystatechange = function () {
        var result = false, message = 'Sorry, something went wrong. Please try again later.', alert = true, o;
        if (x.readyState != 4) return;
        if (x.status == 200) {
            o = JSON.parse(x.responseText);
            if (o) {
                if ('result' in o) result = (o.result === true);
                if (('message' in o) && o.message) message = o.message;
                if ('alert' in o) alert = (o.alert === true);
            }
        }
        _this.$submit.classList.remove('waiting');
        if (result) {
            _this.$form.reset();
            if (alert) window.alert(message); else _this.notify('success', (_this.success ? _this.success : message));
        } else {
            if (alert) window.alert(message); else _this.notify('failure', (_this.failure ? _this.failure : message));
        }
        _this.$submit.disabled = false;
    };
};
if (_this.preHandler) (_this.preHandler)(_this, handler); else (handler)();
};
new form('form02', {mode: 'contact', method: 'post', hid: 'fname', success: '#contact-done',});
功能表(id、设置){
var_this=这个;
this.id=id;
this.mode=settings.mode;
this.method=settings.method;
this.success=settings.success;
this.preHandler=(“设置”中的“preHandler”?设置.preHandler:null);
this.failure=(“设置”中的“失败”?设置.failure:null);
this.optional=(“设置”中的“可选”?settings.optional:[]);
this.$form=$(“#”+this.id);
此.$form.addEventListener('submit',函数(事件){
_提交(事件);
});
此.$form.addEventListener('keydown',函数(事件){
if(event.keyCode==13&&event.ctrlKey){
event.preventDefault();
event.stopPropagation();
_提交(事件);
}
});
var x=$('#'+this.id+'输入[name=“'+settings.hid+'”);
if(x){
x、 禁用=真;
x、 parentNode.style.display='none';
}
this.$submit=$('#'+this.id+'按钮[type=“submit”]”);
此.$submit.disabled=false;
};form.prototype.notify=函数(类型、消息){
如果(message.match(/^(#[a-zA-Z0-9\\\\\\-]+[a-Z0-9\-\.]+:[a-zA-Z0-9\~\!\\\\\\!\\\\\\\\%\\\\\\\\\\\\\+\\\\.\?\/\:]+$/)位置href=message;否则警报(+类型=='failure'?'Error:':':':':''消息);
}; 
form.prototype.submit=函数(事件){
var _this=this,result,handler,fd,k,x,$f,$ff;
event.preventDefault();
如果(此$submit.disabled)返回;
结果=真;
$ff=此。$form.elements;
用于(k,单位:美元){
$f=$ff[k];
如果($f.type!='text'&&$f.type!='email'&&$f.type!='textarea'&&$f.type!='select one')继续;
如果($f.disabled)继续;
如果($f.value==''| |$f.value===null){
如果(this.optional.indexOf($f.name)!=-1)继续;
结果=假;
}否则{
x='';
交换机($f.type){
“电子邮件”案例:
x=“^([a-zA-Z0-9\\\\\\-\\\\\\+])@([a-zA-Z0-9\\-\\\.]+)\.([a-zA-Z]+)$”;
打破
案例“选择”:
x=“^[a-zA-Z0-9\\-]$”;
打破
违约:
案例“文本”:
案例“textarea”:
x=“^[^\\]+$”;
打破
}
结果=结果和$f.value.match(新的RegExp(x));
}
如果(!结果)中断;
}
如果(!结果){
此.notify('failure'、'缺少和/或无效字段。请重试');
返回;
}
如果(_this.method=='get'){
_这是。$form.submit();
返回;
}
如果(x=$(':focus'))x.blur();
此.$submit.disabled=true;
这个.submit.classList.add('waiting');
handler=函数(值){
变量x,k,数据;
数据=新表单数据(_this.$form);
如果(值)用于(k个值)数据。追加(k,值[k]);
x=新的XMLHttpRequest();
x、 打开('POST',['','POST',_this.mode.)。加入('/');
x、 发送(数据);
x、 onreadystatechange=函数(){
var result=false,message='抱歉,出现问题。请稍后再试',alert=true,o;
如果(x.readyState!=4)返回;
如果(x.status==200){
o=JSON.parse(x.responseText);
如果(o){
if('result'在o中)result=(o.result==true);
如果(('message'在o中)和&o.message)message=o.message;
如果(o中的('alert')alert=(o.alert==true);
}
}
_此.submit.classList.remove('waiting');
如果(结果){
_这是。$form.reset();
if(alert)window.alert(message);else _this.notify('success',(_this.success?_this.success:message));
}否则{
if(alert)window.alert(message);else(this.notify('failure'),(this.failure?\u this.failure:message));
}
_此.$submit.disabled=false;
};
};
if(_this.preHandler)(_this.preHandler)(_this,handler);else(handler)();
};
新表单('form02',{mode:'contact',method:'post',hid:'fname',success:'#contact done',});

html表单通常使用
操作
参数指定脚本提交表单数据的url。但是,您的javascript代码似乎是硬编码的,用于创建一个ajax帖子,返回到
/post/contact
的url,这可能解释了您尝试的示例不起作用的原因


是的,您确实需要在服务器上使用某种脚本来处理响应,但它不一定是PHP—无论您的托管提供商支持什么,也不一定是能够处理数据的任何脚本。

Java是服务器端服务和API的优秀语言。托管一个web应用程序还有很多
function form(id, settings) {
var _this = this;
this.id = id;
this.mode = settings.mode;
this.method = settings.method;
this.success = settings.success;
this.preHandler = ('preHandler' in settings ? settings.preHandler : null);
this.failure = ('failure' in settings ? settings.failure : null);
this.optional = ('optional' in settings ? settings.optional : []);
this.$form = $('#' + this.id);
this.$form.addEventListener('submit', function (event) {
    _this.submit(event);
});
this.$form.addEventListener('keydown', function (event) {
    if (event.keyCode == 13 && event.ctrlKey) {
        event.preventDefault();
        event.stopPropagation();
        _this.submit(event);
    }
});
var x = $('#' + this.id + ' input[name="' + settings.hid + '"]');
if (x) {
    x.disabled = true;
    x.parentNode.style.display = 'none';
}
this.$submit = $('#' + this.id + ' button[type="submit"]');
this.$submit.disabled = false;
};form.prototype.notify = function (type, message) {
if (message.match(/^(#[a-zA-Z0-9\_\-]+|[a-z0-9\-\.]+:[a-zA-Z0-  9\~\!\@\#$\%\&\-\_\+\=\;\,\.\?\/\:]+)$/)) location.href = message; else alert((type == 'failure' ? 'Error: ' : '') + message);
}; 

form.prototype.submit = function (event) {
var _this = this, result, handler, fd, k, x, $f, $ff;
event.preventDefault();
if (this.$submit.disabled) return;
result = true;
$ff = this.$form.elements;
for (k in $ff) {
    $f = $ff[k];
    if ($f.type != 'text' && $f.type != 'email' && $f.type != 'textarea' && $f.type != 'select-one') continue;
    if ($f.disabled) continue;
    if ($f.value === '' || $f.value === null) {
        if (this.optional.indexOf($f.name) !== -1) continue;
        result = false;
    } else {
        x = '';
        switch ($f.type) {
            case 'email':
                x = "^([a-zA-Z0-9\\_\\-\\.\\+]+)@([a-zA-Z0-9\\-     \\.]+)\\.([a-zA-Z]+)$";
                break;
            case 'select':
                x = "^[a-zA-Z0-9\\-]$";
                break;
            default:
            case 'text':
            case 'textarea':
                x = "^[^\\<\\>]+$";
                break;
        }
        result = result && $f.value.match(new RegExp(x));
    }
    if (!result) break;
}
if (!result) {
    this.notify('failure', 'Missing and/or invalid fields. Please try again.');
    return;
}
if (_this.method == 'get') {
    _this.$form.submit();
    return;
}
if (x = $(':focus')) x.blur();
this.$submit.disabled = true;
this.$submit.classList.add('waiting');
handler = function (values) {
    var x, k, data;
    data = new FormData(_this.$form);
    if (values) for (k in values) data.append(k, values[k]);
    x = new XMLHttpRequest();
    x.open('POST', ['', 'post', _this.mode].join('/'));
    x.send(data);
    x.onreadystatechange = function () {
        var result = false, message = 'Sorry, something went wrong. Please try again later.', alert = true, o;
        if (x.readyState != 4) return;
        if (x.status == 200) {
            o = JSON.parse(x.responseText);
            if (o) {
                if ('result' in o) result = (o.result === true);
                if (('message' in o) && o.message) message = o.message;
                if ('alert' in o) alert = (o.alert === true);
            }
        }
        _this.$submit.classList.remove('waiting');
        if (result) {
            _this.$form.reset();
            if (alert) window.alert(message); else _this.notify('success', (_this.success ? _this.success : message));
        } else {
            if (alert) window.alert(message); else _this.notify('failure', (_this.failure ? _this.failure : message));
        }
        _this.$submit.disabled = false;
    };
};
if (_this.preHandler) (_this.preHandler)(_this, handler); else (handler)();
};
new form('form02', {mode: 'contact', method: 'post', hid: 'fname', success: '#contact-done',});