javascript - jQuery ajax 响应显示在浏览器中而不是传递给回调函数

标签 javascript ajax json jquery

我有一个 Web 应用程序,可以登录另一个 Web 服务并可以为用户执行一些操作。

我正在使用 codeigniter 和 jQuery。我在 codeigniter 中设置了一个 Controller ,专门用于处理 ajax 请求。 Controller 执行所需的任何操作,然后echos json。

下面的 ajax 调用应该获取其他 Web 服务的用户名和密码,并将它们发布到我的 ajax Controller 。 Controller 使用这些值尝试登录其他服务(使用curl)。 json响应反射(reflect)了登录是否成功。

我的问题是,有时我的浏览器会重定向到ajax Controller ,因此json响应会回显到浏览器。我无法确定为什么或何时发生这种情况。当发生这种情况时,不会调用 success 函数。

/* Verify login credentials
 *
 * @param username, password
 * @param activityElement - element in which to place activity indicator
 * @param location - location to refresh after success
 * @return none
*/
function verify_login(username, password, activityElement, location) 
{  
    $.ajax({
        type: 'POST',
        url: '<?=site_url('ajax/eval_login')?>',
        data: { username: username, password: password },
    beforeSend:function() {
        window.savedHtml = $(activityElement).html();
        $(activityElement).html('<div id="activity"></div><div class="text-center">Verifying </div>');
        $('#activity').activity(); //neteye activity indicator plugin
    },
    success:function(data) {
        data = $.parseJSON(data);
        if (data.success) {
            $(activityElement).html(window.savedHtml);

            //fades in success message then performs function
            set_message('Success!',function() {
                alert(location);
                window.location.href = "<?=site_url()?>/" + location;
            });
        } else {
            $(activityElement).html(window.savedHtml);
            set_message(data.error);
        }    
        $('#activity').activity(false);
        set_clicks();
    },
    error:function(){
        set_message('<strong>Oops!</strong> Try that again in a few moments.</p>');
        $('#activity').activity(false);
        $(activityElement).html(window.savedHtml);
    }
    });
}

编辑: 我很困惑。我真的觉得 ajax 请求不是问题所在...对我来说毫无意义

再次走过它..

  1. 请求通过 .ajax 调用发送
  2. 有时一切都会按预期进行(请求返回,UI 更新)
  3. 有时浏览器只会转到 http://yadayada.local/index.php/ajax/eval_login ,其中显示正确的 json 响应(请参见下面的屏幕截图..)。有趣的是,正在显示正确的 json 响应。如果浏览器只是重定向,则不会有任何输出,因为 $_POST 将为空...

screenshot

最佳答案

问题是我出于某种原因将表单操作指向了 ajax Controller ,而 event.preventDefault() 仅有时有效。不敢相信我这么做了..我想我因为草率的逻辑而应得的

关于javascript - jQuery ajax 响应显示在浏览器中而不是传递给回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592261/

相关文章:

javascript - 使用 React、react-router、jest 和 enzyme 测试状态变化

javascript - Ajax 响应后显示弹出警报

javascript - JQuery ajax 忽略 url

javascript - 解析嵌套的 Json

javascript - id.style.display 不工作

php - 停止数据库读取阻止 web ui 渲染

java - 从 p :selectCheckboxMenu with a primefaces ajax event "change"? 取消选择最后一个选定项目时如何更新支持 bean

json - 如何在 Excel VBA 中从这个简单的 JSON 字符串中提取值?

xml - 有没有办法将目录中的一些 XML 文件转换为 AVRO 文件?

javascript - Ember js 迭代模型并检查值是否存在