我正在尝试使用PHP
将我网站上的表单中的信息发送到Ajax
脚本。但是,每次我尝试提交表单时,我都无法从服务器上的脚本返回任何响应。我不知道自己错过了什么,我很感激任何帮助。
这是我的HTML
:
<form method='post' action='<?= get_template_directory_uri() ?>/mailchimp.php'>
<input type='text' name='email'/>
<input type='submit' name='submit' value='Subscribe'/>
</form>
这是我的PHP
:
session_start();
if(isset($_POST['submit'])){
$email = $_POST['email'];
if(!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL) === false){
// MailChimp API credentials
$apiKey = 'xxx-xxx';
$listID = 'xxxxxxx';
// MailChimp API URL
$memberID = md5(strtolower($email));
$dataCenter = substr($apiKey,strpos($apiKey,'-')+1);
$url = 'https://' . $dataCenter . '.api.mailchimp.com/3.0/lists/' . $listID . '/members/' . $memberID;
// member information
$json = json_encode([
'email_address' => $email,
'status' => 'subscribed'
]);
// send a HTTP POST request with curl
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $apiKey);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo "<h1>Success</h1>";
}
}
这是我的JQuery
:
jQuery('form').submit(function (event) {
console.log('submitting...')
//1. Get the form Data
var formData = {
'email': jQuery('input[name=email]').val()
}
console.log("DATA FROM FORM:")
console.log(formData);
//2. Process the form
jQuery.ajax({
type: 'POST', //Type of HTTP request
url: 'mailchimp.php', //URL to POST
data: formData //Data from form
}).done(function (data) {
console.log("RESPONSE: " + data);
});
//3. Stop the form from submitting in usual manner
event.preventDefault();
});
我已经检查了我的控制台,我发现JS
没有错误。我明白这一点:
submitting...
DATA FROM FORM:
Object {email: "xyz@domain.com"}
RESPONSE:
我还检查了我的网络请求,我可以看到我已经请求PHP
脚本并且它已经发送了200响应,所以我正在点击脚本 - 但是我没有看到任何响应数据。
*另请注意 - 我知道在上面的PHP代码中我没有检查$httpCode
变量。我将实施这个。我只是想先让脚本与彼此交谈。
答案 0 :(得分:7)
发生这种情况是因为你的情况:
if(isset($_POST['submit'])){
由于您未在仅发送submit
的{{1}}请求中发送POST
参数,因此永远无法覆盖。
请删除条件或将其替换为email
,或者也可以将isset($_POST['email'])
参数添加到submit
。
要确保发送到正确路线的请求尝试对所有代码进行注释并添加回声(例如
formData
)并检查是否会记录它。
希望这有帮助。
答案 1 :(得分:2)
正如我提到的那样,其他人说你没有在你的ajax请求中使用索引<input readonly type="text" class="form-control" [(ngModel)]="createdCode">
<button class="btn btn-default" type="button" ngIIclipboard [cbContent]="createdCode">copy</button>
,这意味着你的PHP代码中有未定义的索引警告。
最好在PHP代码中使用php submit
,这有助于找出错误和警告。
error_reporting()
其次,如果您仍想在代码中添加检查而不是使用:
// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
// Report all PHP errors (see changelog)
error_reporting(E_ALL);
或
if(count($_POST) > 0)
最后,您是否希望来自CURL请求的此响应? if(isset($_POST['email']) && !empty($_POST['email']))
这意味着您始终可以获得成功消息执行或不执行。
答案 2 :(得分:0)
在你的php脚本中试试这个:
if(isset($_POST['email'])){
}
没有贬低
if(isset($_POST['submit'])){
}