我有一个 Web 应用程序,它登录到另一个 Web 服务并可能为用户执行一些操作。
我正在使用 codeigniter 和 jQuery。我在 codeigniter 中设置了一个控制器,专门用于处理 ajax 请求。控制器做它需要做的任何事情,然后echo
是 json.
下面的 ajax 调用应该获取其他 Web 服务的用户名和密码,并将它们发布到我的 ajax 控制器。控制器使用这些值尝试登录到其他服务(使用 curl)。json 响应反映了登录是否成功。
我的问题是有时我的浏览器被重定向到 ajax 控制器,所以 json 响应被echo
编辑到浏览器。我无法确定发生这种情况的原因或时间。发生这种情况时,不会调用该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
它将是空的......