php - jQuery AJAX post 不适用于所有计算机

标签 php jquery ajax

我有一个简单的表单,使用 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>';
    }
}
?>

最佳答案

由于您正在设置类型:“GET”,因此您没有将数据发布到服务器。

这意味着发送的是 HTTP GET 请求,而不是 HTTP POST。 GET 请求通常由客户端缓存,因此您可能会遇到根本没有发送任何请求的情况(当使用某些字段值组合时),因为该请求的响应已在客户端缓存中。

您应该更改代码(javascript 和 php)以使用 HTTP POST。造成这种情况的原因有两个:

  1. POST 响应不会被缓存,因此每次提交时都会发送一个新请求。
  2. GET 不应用于可能产生副作用的请求。

关于php - jQuery AJAX post 不适用于所有计算机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16130953/

相关文章:

javascript - 我想将数据库中的数据与 googlelocation 下拉列表进行匹配

php - 避免单个类 PHP 的多个类实例化?

jquery - 在 div 悬停效果上显示图像

jquery - jvectormap 工具提示的 Z-Index 定位

javascript - ajax 页面加载器出现 404 错误

php - 从 FormData 获取服务器上的数据时遇到问题

php - 帮我为 iou Web 应用程序设计数据库架构

php - 统计每天的入场次数

javascript - 对于稍后通过脚本添加到 DOM 的元素,不会调用事件监听器

应用 jQuery 后 php header 不起作用