我有一个 Web 应用程序,可以登录另一个 Web 服务并可以为用户执行一些操作。
我正在使用 codeigniter 和 jQuery。我在 codeigniter 中设置了一个 Controller ,专门用于处理 ajax 请求。 Controller 执行所需的任何操作,然后echo
s 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 请求不是问题所在...对我来说毫无意义
再次走过它..
- 请求通过
.ajax
调用发送 - 有时一切都会按预期进行(请求返回,UI 更新)
- 有时浏览器只会转到
http://yadayada.local/index.php/ajax/eval_login
,其中显示正确的 json 响应(请参见下面的屏幕截图..)。有趣的是,正在显示正确的 json 响应。如果浏览器只是重定向,则不会有任何输出,因为$_POST
将为空...
最佳答案
问题是我出于某种原因将表单操作指向了 ajax Controller ,而 event.preventDefault()
仅有时有效。不敢相信我这么做了..我想我因为草率的逻辑而应得的
关于javascript - jQuery ajax 响应显示在浏览器中而不是传递给回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592261/