php ajax表单提交..什么都没有发生 [英] php ajax form submit ..nothing happens
问题描述
我有一个PHP Ajax表单,试图提交Zendesk API调用.每当我使用Ajax部件时,为了使用户保持在同一页面上,它将无法正常工作.当我删除< script>
部分时,它工作正常,但显然从 contact.html
重定向到 contact.php
认为问题出在Ajax部分,而不是PHP部分.
I have a PHP Ajax form that I'm trying to submit a Zendesk API call. Whenever I use the ajax part, in order to keep the user on the same page, it doesn't work. When I remove the <script>
part, it works fine, but obviously redirects to contact.php
from contact.html
so I'm thinking the problem is in the Ajax part, not in the PHP part.
这是我的HTML表单:
Here is my HTML form:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
</head>
<body>
<div class="box_form">
<form id="zFormer" method="POST" action="contact.php" name="former">
<p>
Your Name:<input type="text" value="James Duh" name="z_name">
</p>
<p>
Your Email Address: <input type="text" value="duh@domain.com" name="z_requester">
</p>
<p>
Subject: <input type="text" value="My Subject Here" name="z_subject">
</p>
<p>
Description: <textarea name="z_description">My Description Here</textarea>
</p>
<p>
<input type="submit" value="submit" id="submitter" name="submit">
</p>
</form>
</div>
<div class="success-message-subscribe"></div>
<div class="error-message-subscribe"></div>
<script>
jQuery(document).ready(function() {
$('.success-message-subscribe').hide();
$('.error-message-subscribe').hide();
$('.box_form form').submit(function() {
var postdata = $('.box_form form').serialize();
$.ajax({
type: 'POST',
url: 'contact.php',
data: postdata,
dataType: 'json',
success: function(json) {
if(json.valid == 1) {
$('.box_form').hide();
$('.error-message-subscribe').hide();
$('.success-message-subscribe').hide();
$('.subscribe form').hide();
$('.success-message-subscribe').html(json.message);
$('.success-message-subscribe').fadeIn();
}
}
});
return false;
});
});
</script>
</body>
</html>
以及PHP部分:
您可能会忽略其中的大部分内容,因为当我不使用Ajax时它可以工作.仅最后几行给出响应 $ array ['valid'] = 1;
,然后应由上面的 if(json.valid == 1)
捕获.
You can probably ignore most of this since it works when I don't use the Ajax. Only the last few lines gives the response $array['valid'] = 1;
which should then be catched by if(json.valid == 1)
above.
<?php
( REMOVED API CALL CODE FROM ABOVE HERE )
if (isset($_POST['submit'])) {
foreach($_POST as $key => $value){
if(preg_match('/^z_/i',$key)){
$arr[strip_tags($key)] = strip_tags($value);
}
}
$create = json_encode(array('ticket' => array(
'subject' => $arr['z_subject'],
'comment' => array( "body"=> $arr['z_description']),
'requester' => array('name' => $arr['z_name'],
'email' => $arr['z_requester'])
)));
$return = curlWrap("/tickets.json", $create, "POST");
$array = array();
$array['valid'] = 1;
$array['message'] = 'Thank you!';
echo json_encode($array);
?>
有什么想法为什么不起作用?
Any ideas why this isn't working?
推荐答案
我希望您使用 contact.php
作为相对URL不能正确解析.检查您的JavaScript控制台,您应该看到显示帖子失败的错误.将 contact.php
更改为 www.your_domain.com/contact.php
,它应该可以正常工作
I expect your use of contact.php
as a relative URL isn't resolving properly. Check your JavaScript console and you should see an error that shows the post failing. Change contact.php
to www.your_domain.com/contact.php
and it should work fine
这篇关于php ajax表单提交..什么都没有发生的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!