1

我一直在使用 AJAX、JQuery 和 Sessions 很长一段时间。但这是我第一次遇到这个问题。

我正在向另一个页面发送正常的发布请求,并且像我的旧代码一样,我使用目标页面中的会话来测试我的 AJAX 请求是否成功。

在我所做的所有这些时间里,它都运行良好,当然,除非有一些明显的 Javascript 错误阻止我的 AJAX 成功进行。

现在发生的情况是,要使 ajax 请求成功,我需要在关闭并重新打开浏览器后触发它,如果我在发送第一个请求后再次执行它,它将不再成功,另一个有趣的事情是当我启用 AJAX 的错误响应时,我总是会收到一个错误,这真的很烦人,因为我无法确定这个问题的根本原因。

这是服务器问题或代码问题还是我不​​知道的某些规则?

我的代码不包括包含的 JS:

<style type="text/css"> 
    .input-select { width: 200px; } 
    .bordered-table { border-collapse:collapse; margin:5px; }
    .bordered-table td { border:1px solid #ccc; padding:4px; }
</style>
<link href="/admin/shop/css/tabs.css" type="text/css" rel="stylesheet" media="screen" />
<link href='http://fonts.googleapis.com/css?family=Raleway:400,500,700,800' rel='stylesheet' type='text/css'>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
    $(function() {    

    $(".tab_content").hide();
     $("ul.tabs").each(function () {
         $(this).find('li:first').addClass("current");
         $(this).next('.panes').find('.tab_content:first').show();
     });

    /* binding click to display another tab */
    $("ul.tabs li a").click(function(event) {

        var cTab = $(this).closest('li');
         cTab.siblings('li').removeClass("current");
         cTab.addClass("current");
         cTab.closest('ul.tabs').nextAll('.panes:first').find('.tab_content').hide();

         var activeTab = $(this).attr("href"); //Find the href attribute value to identify the active tab + content
         $(activeTab).fadeIn(); //Fade in the active ID content
         return false;
    });



});
    function checkIt(evt) {
        evt = (evt) ? evt : window.event
        var charCode = (evt.which) ? evt.which : evt.keyCode
        if (charCode > 31 && (charCode < 48 || charCode > 57)) {
            status = "This field accepts numbers only."
            return false
        }
        status = ""
        return true
    }

    function addRows(elem) {
        var ctr = parseInt($("#rows_ctr").val())+parseInt(1);
        var row = $(elem);
        emails_dropdown = $("#email_id_sample").clone();
        row.closest('.adder').parents(".adder-row").before('<tr><td><b>Subject</b>:</td><td><select name="email_id[]" id="email_id_'+ctr+'" style="width: 350px;margin-right: 5;">'+emails_dropdown.html()+'</select></td></tr>');
        $("#rows_ctr").val(ctr);
        // $("#email_id_"+ctr).val('');
    }

    function addForm() {
        var ctr = parseInt($("#rows_ctr1").val())+parseInt(1);
        form_content = $("#formcopy").clone();
        $('#cform > tbody > tr:last').after('<tr><td><div id="crm-feedback'+ctr+'"></div><form id="form'+ctr+'" onsubmit="return setList('+ctr+');">'+form_content.html()+'<form/></td></tr>');
        $("#rows_ctr1").val(ctr);
    }

    function setList(str){
        var postDatas = decodeURI($('#form'+str+'').serialize());
        console.log('Post data: ' + postDatas);
        $.ajax({
            url: base_url+"admin/page/file.php",
            type: "POST",
            cache: false,
            data: postDatas,
            beforeSend:function(){
                $('#crm-feedback'+str+'').html('<center><img src="images/ajax-loader.gif"></center>');
             },
            success: function(data){
                // $('#crm-feedback').html('Saved!').css('color','green');
                console.log('Success');
            },
            error: function (jqXHR, textStatus, errorThrown) {
                console.log(jqXHR);
                console.log(textStatus);
                console.log(errorThrown);
            }
        });
    }
</script>

<body class="colorbox-body">
    <div class="welcome-box">
        <h1>Set Group Email and SMS</h1>
    </div>
    <div class="colorbox-content">
        <div id="notification">
            <?php 
                if($email_success){ 
                        echo"<font style='color:green;'>Schedule Saved.</font>";
                        echo '<script>
                                    setTimeout("$(\"#notification\").fadeOut()",5000);
                                </script>';
                }   
                if($nochanges==1){
                    echo "<font style='color:red;'>No changes made.</font>";
                    echo '<script>
                                    setTimeout("$(\"#notification\").fadeOut()",5000);
                            </script>';
                }
            ?>
        </div>
        <h2>Set Group Email and SMS</h2>
        <table id="cform">
            <tr>
                <td>
                <form id = "form0" name="form0" onsubmit="return setList(0);">                    
                    <div class="sel">
                    <?php
                        $ctr = 0;
                        //get group emails
                        $sql_grpemails = "some things";
                        $res_grpemails = mysql_query($sql_grpemails);
                        if(mysql_num_rows($res_grpemails) > 0) {
                            while($row_grpemails = mysql_fetch_assoc($res_grpemails)) {
                                echo '<tr><td><b>Subject:</b></td>';
                                echo '<td><select name="email_id[]" id="email_id_'.$ctr.'" style="width: 350px;margin-right: 5;">
                                                <optgroup label="Emails">
                                                <option value="">-- Select --</option>';
                                                    $res_savedemails = mysql_query($sql_savedemails);
                                                    while($row_savedemails = mysql_fetch_assoc($res_savedemails)) {
                                                        echo '<option value="'.$row_savedemails['sam_msg_id'].'" '.($row_savedemails['sam_msg_id']==$row_grpemails['email_id']?'selected':'').'>'.$row_savedemails['sam_subject'].'(Email)</option>';
                                                    }
                                echo '                  
                                                </optgroup>
                                                <optgroup label="SMS">';
                                                    $res_savedsms = mysql_query($sql_savedsms);
                                                    while($row_savedsms = mysql_fetch_assoc($res_savedsms)) {
                                                        echo '<option value="'.$row_savedsms['id'].'-sms" '.($row_savedsms['id']==$row_grpemails['email_id']?'selected':'').'>'.$row_savedsms['subject'].'(SMS)</option>';
                                                    }
                                echo '
                                            </optgroup>
                                            </select></td></tr>';
                                $ctr++;
                            }
                        } 
                    ?>
                    <table cellpadding="3">
                        <tr>
                            <td>
                                <b>Subject:</b>
                            </td>
                            <td>
                                <select name="email_id[]" id="email_id_<?php echo $ctr;?>" style="width: 350px;margin-right: 5;">
                                    <optgroup label="Emails">
                                    <option value="">-- Select --</option>
                                    <?php
                                        $res_savedemails = mysql_query($sql_savedemails);
                                        while($row_savedemails = mysql_fetch_assoc($res_savedemails)) {
                                            echo '<option value="'.$row_savedemails['sam_msg_id'].'">'.$row_savedemails['sam_subject'].'</option>';
                                        }
                                    ?>
                                    </optgroup>
                                    <optgroup label="SMS">
                                    <?php
                                        $res_savedsms = mysql_query($sql_savedsms);
                                        while($row_savedsms = mysql_fetch_assoc($res_savedsms)) {
                                            echo '<option value="'.$row_savedsms['id'].'-sms">'.$row_savedsms['subject'].'</option>';
                                        }
                                    ?>
                                    </optgroup>
                                </select>
                            </td>
                        </tr> 
                        <tr class="adder-row">
                            <td colspan="2">
                                <input type="button" class="adder btn-link right" value="Add More" onclick="addRows(this);" />
                            </td>
                        </tr>                                  
                        </table>

                    </div>                                                             
                        <br/>
                        <input type="hidden" name="rows_ctr" id="rows_ctr" value="<?php echo $ctr;?>" />
                        <input type="hidden" name="rows_ctr1" id="rows_ctr1" value="<?php echo $ctr;?>" />
                        <input type="hidden" name="gid" id="" value="<?php echo $_GET['gid'];?>" />
                        <input type="submit" value="Save" class="btn-link right"  />
                        <div class="clr"></div>
                    </div>
                </form>
                </td>
            </tr>        
        </table>

        <table width="95%">         
            <tr>
                <td colspan="2">
                    <input type="button" class="btn-link right" value="Add More" onclick="javascript:addForm();" />     
                </td>
            </tr>
        </table>


        <select name="email_id_sample" id="email_id_sample" style="display:none;">
                <optgroup label="Emails">
                <option value="">-- Select --</option>
                <?php
                    $res_savedemails = mysql_query($sql_savedemails);
                    while($row_savedemails = mysql_fetch_assoc($res_savedemails)) {
                        echo '<option value="'.$row_savedemails['sam_msg_id'].'">'.$row_savedemails['sam_subject'].'</option>';
                    }
                ?>
                </optgroup>
                <optgroup label="SMS">
                <?php
                    $res_savedsms = mysql_query($sql_savedsms);
                    while($row_savedsms = mysql_fetch_assoc($res_savedsms)) {
                        echo '<option value="'.$row_savedsms['id'].'-sms">'.$row_savedsms['subject'].'</option>';
                    }
                ?>
                </optgroup>
        </select>

        <form id = "formcopy" name="form1" method="post" action="" style="display:none">

                <table cellpadding="3">
                    <tr>
                        <td>
                            <b>Subject:</b>
                        </td>
                        <td>
                            <select name="email_id[]" id="email_id_<?php echo $ctr;?>" style="width: 350px;margin-right: 5;">
                                <optgroup label="Emails">
                                <option value="">-- Select --</option>
                                <?php
                                    $res_savedemails = mysql_query($sql_savedemails);
                                    while($row_savedemails = mysql_fetch_assoc($res_savedemails)) {
                                        echo '<option value="'.$row_savedemails['sam_msg_id'].'">'.$row_savedemails['sam_subject'].'</option>';
                                    }
                                ?>
                                </optgroup>
                                <optgroup label="SMS">
                                <?php
                                    $res_savedsms = mysql_query($sql_savedsms);
                                    while($row_savedsms = mysql_fetch_assoc($res_savedsms)) {
                                        echo '<option value="'.$row_savedsms['id'].'-sms">'.$row_savedsms['subject'].'</option>';
                                    }
                                ?>
                                </optgroup>
                            </select>
                        </td>
                    </tr>
                    <tr class="adder-row">
                        <td colspan="2">                                                
                           <input type="button" class="adder btn-link right" value="Add More" onclick="addRows(this);" />
                        </td>
                    </tr>
                </table>                                                     
            <div class="scheduled_days">
                <p><b>Scheduled (Days)</b></p>
                <br/>
                <ul class="tabs">
                    <li><a href="#tab5">Days</a></li>
                    <li><a href="#tab6">Weekly</a></li>
                    <li><a href="#tab7">Monthly</a></li>
                    <li><a href="#tab8">Yearly</a></li>
                </ul>
                <div class="panes">
                    <div id="tab5" class="tab_content" style = "padding-top: 20px;">
                        <b>Recurring:</b> Every&nbsp;&nbsp;<input type="text" name="dval"/> Day(s)
                        <br/>
                        <small>*Reference date: Member date added to the group</small>
                    </div>
                    <div id="tab6" class="tab_content" style = "padding-top: 20px;">
                        <b>Recurring:</b> Every&nbsp;&nbsp;<input type="text" name="wval"/> Week(s)
                        <br/>
                        <small>*Reference date: Member date added to the group</small>
                        <br/>
                        <input type="radio" name="recursched" value="weekmon"/> Monday <input type="radio" name="recursched" value="weektue"/>Tuesday <input type="radio" name="recursched" value="weekwed"/>Wednesday <input type="radio" name="recursched" value="weekthu"/>Thursday <input type="radio" name="recursched" value="weekfri"/> Friday
                        <input type="radio" name="recursched" value="weeksat"/> Saturday <input type="radio" name="recursched" value="weeksun"/> Sunday
                    </div>
                    <div id="tab7" class="tab_content" style = "padding-top: 20px;">
                        <b>Recurring:</b> <br/><small>*Reference date: Member date added to the group</small>
                        <br/>
                        <input type="radio" name="recursched" value="monthlyrecur"/> Day <input type="text" name="mday"/> of every <input type="text" name="mmonth"/> month(s)
                        <br/>
                        <input type="radio"name="recursched" value="monthlyrecur"/> The 
                        <select name="mweek" class="styled">
                        <option value="First">First</option>
                        <option value="Second">Second</option>
                        <option value="Third">Third</option>
                        <option value="Fourth">Fourth</option>
                        </select>
                    </div>
                    <div id="tab8" class="tab_content" style = "padding-top: 20px;">
                        <b>Recurring:</b> <br/><small>*Reference date: Member date added to the group</small>
                        <br/>
                        <input type="radio" name="recursched" value="yearlyrecur"/> Every 
                        <select name="ymonth" class="styled">
                            <?php
                                $ymontshar = array("January","Febuary","March","April","May","June","July","August","September","October","November","December");
                                for($ymonths=0;$ymonths<12;$ymonths++){
                                    ?>
                                    <option value="<?php echo $ymontshar[$ymonths]; ?>"><?php echo $ymontshar[$ymonths]; ?></option>
                                    <?php
                                }
                            ?>
                        </select>
                        <input type="text" name="yday"/>
                        <br/>
                        <input type="radio" name="recursched" value="yearlyrecur2"/> The
                        <select name="yweek" class="styled">
                            <option value="first">First</option>
                            <option value="second">Second</option>
                            <option value="third">Third</option>
                            <option value="fourth">Fourth</option>
                        </select>
                        <select name="yday" class="styled">
                            <option value="monday">Monday</option>
                            <option value="tuesday">Tuesday</option>
                            <option value="wednesday">Wednesday</option>
                            <option value="thursday">Thursday</option>
                            <option value="friday">Friday</option>
                            <option value="saturday">Saturday</option>
                            <option value="sunday">Sunday</option>
                        </select>
                        of
                        <select name="ymonth2" class="styled">
                            <?php
                                for($ymonths2=0;$ymonths2<12;$ymonths2++){
                                    ?>
                                    <option value="<?php echo $ymontshar[$ymonths2]; ?>"><?php echo $ymontshar[$ymonths2]; ?></option>
                                    <?php
                                }
                            ?>
                        </select>
                    </div>
                </div>
                <br/>
                <input type="hidden" name="rows_ctr" id="rows_ctr" value="<?php echo $ctr;?>" />
                <input type="hidden" name="rows_ctr1" id="rows_ctr1" value="<?php echo $ctr;?>" />
                <input type="hidden" name="gid" id="" value="<?php echo $_GET['gid'];?>" />
                <input type="submit" value="Save" class="btn-link right"  />
                <div class="clr"></div>
            </div>
        </form>
        <br />
        <div class="warning-msg">
            <b>*Please note that changing the schedule may result in some members not receiving emails.</b>
        </div>
    </div>        
</body>  

它现在可以在 chrome 上运行,但并非在所有情况下,我可能需要提交两次才能通过它

4

9 回答 9

3

服务器端很可能有错误。您可以通过使用 ajax 错误处理程序来识别该错误,也可以在调试 JS 时尝试使用 console.log() 而不是 alert():

function setList(str){
    var postDatas = decodeURI($('#form'+str+'').serialize());
    console.log('Post data: ' + postDatas);
    $.ajax({
        url: base_url+"admin/page/file.php",
        type: "POST",
        data: postDatas,
        success: function (data) {
            // $('#crm-feedback').html('Saved!').css('color','green');
            console.log('Success');
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(jqXHR);
            console.log(textStatus);
            console.log(errorThrown);
        }
    });
}

然后检查控制台的详细消息,我想你会知道当时发生了什么。

于 2013-07-05T12:43:33.053 回答
2

除了查看 javascript 控制台之外,您还需要查看正在交换的实际流量。

使用提琴手检查一下。

您还应该尝试使用您使用的浏览器上可用的工具来调试 js。

这是解决问题的关键步骤。您需要确定请求是否真的发生。如果是这样,那么您需要查看请求中的差异。否则,您可以调试 js 以确切了解发生了什么。

于 2013-07-04T13:20:18.777 回答
0

也许它正在缓存它。像这样尝试cache: falseajax调用。

function setList(str){
    var postDatas = decodeURI($('#form'+str+'').serialize());
    alert(postDatas);
    // $('#crm-feedback').html('<img src="images/ajax-loader.gif"/>');
    // var formname = "test";
    $.ajax({
        url: base_url+"admin/page/file.php",
        type: "POST",
        cache: false,
        data: postDatas,
        // data: "formname="+formname,
        success: function(data){
            // $('#crm-feedback').html('Saved!').css('color','green');
            alert("test");
        }

    });
}
于 2013-06-22T16:00:23.833 回答
0

可能是您使用了绝对 URL,某些浏览器在处理绝对 URL 时遇到问题,即使不是,也将它们视为跨域请求。检查是否base_url+"admin/page/file.php"是绝对 url ( http://yourserver/admin/page/file.php)。如果是这样,请尝试更改为相对 url。

于 2013-07-06T09:25:28.747 回答
0

我希望您了解浏览器调试工具并正在使用它们。

如果没有,对于 firefox 尝试 firebug - https://addons.mozilla.org/en-US/firefox/addon/firebug/ 或对于 chrome,可以使用默认的开发人员工具。无需安装。在这两种情况下,按 F12 打开开发工具。

如果使用 firebug,请单击 Net 选项卡。然后执行触发 ajax 调用的操作。在那里添加了相应的行。单击该行。它将打开以显示一些选项卡,例如标头、请求、响应等。查看响应选项卡。它说什么?

在 chrome 中,会有一个网络选项卡。打开它并触发您的 ajax 调用。休息几乎与萤火虫相似。响应选项卡说什么。

如果您没有找到确凿的结果,请尝试在 firebug 中的脚本选项卡或 chrome 开发人员工具中的源选项卡中的 ajax 调用的错误函数中放置断点。观察错误参数包含的信息。

于 2013-07-06T19:28:02.360 回答
0

提供页面是否涉及 .htaccess 文件(例如漂亮的 url 或某种路由)?

如果是这样,请尝试http://domain.tld/index.php/page_uri改用并检查某些 htaccess 规则是否阻止 POST 请求。

您是否将数据发布到与发起 AJAX 请求的页面相同的 URL?否则,可能会出现 CSRF 或跨域问题。在这种情况下,请查看跨域 AJAX 指南

那么应该处理 AJAX 请求的 php 文件中可能存在错误配置或错误。运行 PHP-Lint 并查看它的内容或手动检查。

实际上,您提供的数据(问题描述和代码片段)对问题的了解很少。可能有更多的问题来源。像这样,这是一个猜谜游戏。我不是在抱怨,将其视为使用有关该问题的更多信息来更新答案的建议。

于 2013-07-08T19:37:31.223 回答
0

尝试在您的请求中添加随机 $_GET

rand     = rand.getMilliseconds(rand);  
url_ajax ='myajaxpage.php?rand='+rand;  // Force refresh

$.ajax({
    url: url_ajax,
    type: "POST",
    ...
于 2013-07-09T12:39:59.027 回答
0

根据您使用的浏览器,它可能正在缓存您的POST请求。它不是 jQuery 缓存,所以cache: false无济于事。它是真正的浏览器。

必须手动设置响应的标头以PHP确保不会缓存其他请求。

header("Cache-Control: no-cache, must-revalidate"); //HTTP 1.1
header("Pragma: no-cache"); //HTTP 1.0
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
于 2013-07-09T19:51:17.647 回答
0

您描述了服务器端发生的错误。请调试您的代码。

如果您对服务器端的错误有疑问,请更新您的问题,或者最好使用适当的代码(服务器端代码)发布另一个问题。


确保您的 php.ini 不会关闭错误消息和警告。

检查您的服务器错误日志(我想您使用 apache ?)。

于 2013-07-10T09:44:43.693 回答