php - AJAX 电子邮件注册表单 + .htaccess 干净 URL 问题

标签 php jquery mysql forms newsletter

我已经在这里成功安装了这个基于 jQuery 的注册表单: http://net.tutsplus.com/tutorials/javascript-ajax/building-a-sleek-ajax-signup-form/

但是当我将它应用到我的主布局(基于 PHP 并使用干净的 URL)时,该表单的工作方式很奇怪: 我提交了一封电子邮件,它停留在“请稍候...”状态。 我猜测它停止运行 $.ajax({ 行。

JS代码如下:

<script type="text/javascript">
    // code using jQuery
    $(document).ready(function(){

        $('#newsletter-signup').submit(function(){

            //check the form is not currently submitting
            if($(this).data('formstatus') !== 'submitting'){

                //setup variables
                var form = $(this),
                    formData = form.serialize(),
                    formUrl = form.attr('action'),
                    formMethod = form.attr('method'), 
                    responseMsg = $('#signup-response');

                //add status data to form
                form.data('formstatus','submitting');

                //show response message - waiting
                responseMsg.hide()
                           .addClass('response-waiting')
                           .text('Please Wait...')
                           .fadeIn(200);

                //send data to server for validation
                $.ajax({
                    url: formUrl,
                    type: formMethod,
                    data: formData,
                    success:function(data){

                        //setup variables
                        var responseData = jQuery.parseJSON(data), 
                            klass = '';

                        //response conditional
                        switch(responseData.status){
                            case 'error':
                                klass = 'response-error';
                            break;
                            case 'success':
                                klass = 'response-success';
                            break;  
                        }

                        //show reponse message
                        responseMsg.fadeOut(200,function(){
                            $(this).removeClass('response-waiting')
                                   .addClass(klass)
                                   .text(responseData.message)
                                   .fadeIn(200,function(){
                                       //set timeout to hide response message
                                       setTimeout(function(){
                                           responseMsg.fadeOut(200,function(){
                                               $(this).removeClass(klass);
                                               form.data('formstatus','idle');
                                           });
                                       },3000)
                                    });
                        });
                    }
                });
            }

            //prevent form from submitting
            return false;
        });
    });

 // end noConflict wrap
</script>

HTACCESS 看起来像这样:

<IfModule mod_rewrite.c>

    RewriteEngine On

    # COMPANY NAVIGATION

        #Sends URI to index.php for parsing
        RewriteRule !\.(css|gif|jpg|png|ico|txt|xml|js|pdf|htm|zip)$ /path/to/main/folder/index.php [NC]

</IfModule>

它将变量传递到index.php。在index.php 中,我将所有内容拆分为一个数组,并以这种方式解析 URL:

    function create_url_array($url) {
        strip_tags($url);
        $url_array = explode("/", $url);
        array_shift($url_array); // First one is empty
        return $url_array;
    }
    $url = $_SERVER['REQUEST_URI'];
    $url_array = create_url_array($url);

if($url_array[1] == "folder") { 
// include relevant page/s etc
}

我已经尝试解决这个问题几个小时了,但仍然没有找到解决方案。

任何提示/有用的信息都会很棒。

/* 编辑:包括 Firebug 分析 */

谢谢内森!我尝试了您的建议,并在运行测试时出现以下错误(尝试提交表单):

"uncaught exception: Invalid JSON: 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
... 
{"status":"success","message":"You have been signed up!"}"

它基本上为我提供了整个页面的代码,一直到成功消息。该条目确实成功出现在 mysql 中。
我认为问题实际上是传递的 JSON...我根本不太熟悉。 htaccess/clean URL 出现的地方似乎出现了问题。
我不知道该去哪里解决这个问题。您有什么建议吗?

最佳答案

从这里下载 Firebug:https://addons.mozilla.org/en-US/firefox/addon/firebug/

  • 安装
  • 打开 Firefox 并加载您想要的网页,然后单击浏览器窗口右下角的火型小甲虫

Firebug Icon

然后,您需要选择控制台选项卡并刷新您的网站,以便控制台正确加载,您现在需要做的就是在从应用程序请求 ajax 操作后查看控制台! Console Tab

您将看到一个带有 GET 或 POST 的加载栏(取决于您使用的表单方法),这将能够告诉您已发送哪些数据以及 php 文件中的任何错误。

关于php - AJAX 电子邮件注册表单 + .htaccess 干净 URL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5124332/

相关文章:

php - 使用 sprintf 进行 ORDER、LIMIT 和查询

php - kohana orm 顶级用户

javascript - 基本的 If else 语句在 JavaScript 中不起作用

mysql - sphinx 搜索 : joining 3 tables

php - 如何使用数组中的值获取查询结果?

php - Html Box Around 实时输入

javascript - 应用溢出时窗口松开滚动位置

php - 这是在我的网站上创建无限滚动系统的正确方法吗?

php - mysqli 为 INSERT 查询返回 true,未插入行

java - Hibernate 5 PropertyAccessException : Error accessing field by reflection for persistent property