Jav*_*bra 0 javascript php ajax jquery
我正在尝试从我的网站上的表单发送信息到使用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>
Run Code Online (Sandbox Code Playgroud)
这是我的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>";
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的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();
});
Run Code Online (Sandbox Code Playgroud)
我已经检查了我的控制台,我可以看到没有错误JS.我看到了这个:
submitting...
DATA FROM FORM:
Object {email: "xyz@domain.com"}
RESPONSE:
Run Code Online (Sandbox Code Playgroud)
我还检查了我的网络请求,我可以看到我已经请求了PHP脚本,并且它发送了200响应,所以我正在点击脚本 - 但是我没有看到任何响应数据.
*另请注意 - 我知道在上面的PHP代码中我不检查$httpCode变量.我将实施这个.我只想先让脚本与彼此交谈.
那是因为你的情况:
if(isset($_POST['submit'])){
Run Code Online (Sandbox Code Playgroud)
永远不会到达,因为你没有submit在POST你发送的请求中发送参数email.
因此,删除条件或替换它isset($_POST['email']),或者您也可以将submit参数添加到您的formData.
为了确保发送到正确路由的请求尝试注释所有代码并添加回声(例如
echo "<h1>Test</h1>";)并检查是否将记录它.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |