我有一个简单的表单,可以使用jQuery / Ajax / PHP发送数据。 PHP代码在将输入发送到数据库之前先对其进行验证,如果输入无效,则将错误消息返回到响应div。
它在我的计算机和我自己的服务器上都很好用。但是,当我将其上传到客户端的服务器时,它无法正常工作。从客户端服务器访问页面时,我注意到以下内容:
仅当所有输入字段均具有值时,验证结果才会发送到响应div。如果任何字段为空,则什么也不会发生,并且不会返回验证消息。
这似乎不是机器问题,因为我使用同一台计算机来访问3个副本,一个副本位于我的本地主机上,一个副本位于我的服务器上,一个副本位于客户端的服务器上。
这是代码; jQuery:
$(document).ready(function() {
$('#signup').click(function() {
var queryString = 'ajax=true';
var txtName = encodeURIComponent($('#txtName').val());
if(txtName.length > 0){
txtName = txtName.replace(/\%/g, '-');
}
var txtEmail = escape($('#txtEmail').val());
var txtPhone = encodeURIComponent($('#txtPhone').val());
if(txtPhone.length > 0){
txtPhone = txtPhone.replace(/\%/g, '-');
}
var txtPhoneCode = encodeURIComponent($('#txtPhoneCode').val());
if(txtPhoneCode.length > 0){
txtPhoneCode = txtPhoneCode.replace(/\%/g, '-');
}
queryString = queryString + '&txtEmail=' + txtEmail;
queryString = queryString + '&txtName=' + txtName;
queryString = queryString + '&txtPhone=' + txtPhone;
queryString = queryString + '&txtPhoneCode=' + txtPhoneCode;
$.ajax({
type: "GET",
url: 'send.php',
data: queryString ,
success: function(msg) {
$('#response').html(msg);
}
});
return false;
});
});
PHP页面:
<?php
if(isset($_GET['ajax']) && ($_GET['ajax'] == 'true')){
$name = trim($_GET['txtName']); // coming from input text
$email = trim($_GET['txtEmail']); // coming from input text
$phone = trim($_GET['txtPhone']); // coming from input text
$phonecode = trim($_GET['txtPhoneCode']); // coming from a select
if(strlen($name) == 0){
echo 'Please enter your name';
}
elseif(strlen($email) == 0){
echo 'Please enter your email';
}
elseif(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i", $email)){
echo 'Please enter a valid email';
}
elseif(strlen($phonecode) == 0){
echo 'Please select phone code';
}
elseif(strlen($phone) == 0){
echo 'Please enter your phone';
}
elseif(!preg_match("/^[0-9]*$/i", $phone)){
echo 'Please enter a valid phone';
}
else{
require('config.php');
// send to mysql db
$email = stripslashes($email);
$name = urldecode(str_replace('-', '%', $name));
$phone = urldecode(str_replace('-', '%', $phone));
$phonecode = urldecode(str_replace('-', '%', $phonecode));
$dt = gmdate("Y-m-d H:i:s");
$sql = "insert into subscribers(datecreated, name, email, phone, phonecode) values('$dt', '$name', '$email', '$phone', '$phonecode')";
$result = mysql_query($sql) or die('Error: Failed to save subscription!');
// redirect
echo '<script>setTimeout(function(){ window.location = "thankyou.html#ty"; }, 0);</script>';
}
}
?>
参考方案
由于设置了type: "GET"
,因此您没有将数据发布到服务器。
这意味着发送的是HTTP GET请求,而不是HTTP POST。 GET请求通常由客户端缓存,因此您可能会遇到根本不发送请求的情况(使用字段值的某些组合时),因为该请求的响应已经在客户端的缓存中。
您应该更改代码(javascript和php)以改为使用HTTP POST。原因有两个:
POST响应不会被缓存,因此每次提交时都会发送一个新请求。
GET不应用于可能有副作用的请求。
在我的PHP文件中,我将一些变量从输入框传递到链接中,该链接通过jQuery的ajax load函数在其URL中使用该变量加载页面。整个系统运行良好,但仅适用于单字变量。每当涉及到空格时,我的Ajax通话都会中断。我假设这是一个编码问题,但是我也有一些疑问。基本上,它归结为我的PHP文件中的这一行代码,这导致了混乱。是否有可能找出格式是否正确,或者为什么在多…
jQuery PHP在函数中传递值与实时单击? - php我正在尝试通过onclick传递一些值,这对我来说要快得多。但是我需要使用某种“实时”单击,并且正在查看.on()或.delegate()。但是,如果执行这些操作中的任何一个,则在followme()中传递这些值似乎很难。有没有我看不到的某种方法? <div class='btn btn-mini follow-btn' data-…
使用ajax动态检查邮件收件箱? - php我几个月前就开始编写一个网站,几乎完成了编码工作。我已经做好了基础,但是,我想为其添加一些新功能,以使其更快并为其添加一些亮点。当前,我有一个系统,通过该系统php可以查询数据库,以查看每次发出新页面请求时是否有未读消息。如果用户有未读消息,则php会在引号内回显未读消息的数量。我如何使用ajax或jquery来回显未读消息的数量而不必发出新的页面请求?谢谢…
jquery.post()和php - php我正在使用$()。post和php来更改的内容。脚本成功执行-萤火虫清楚地表明textarea标记之间的文本已更改,并且我的小警报触发。但是,用户看不到更改。在Firefox中根本不会发生更改,而在IE中,textarea最多可延迟10秒更新。这是我正在使用的jQuery:$(document).ready(function() { $('#pv_…
如何在jQuery中使用Ajax向数组传递值并在PHP页面中获取值 - php我有一个ajax发布参数,如下所示:$.ajax({ url:'url', data:{ary:my_ary}, ... my_ary = Array([0]=> Test Text,[1]=> test Text2)中的值现在,我需要使用如下的foreach()循环从此数组中获取值: foreach($_POST['…