服务器端函数在通过ajax访问时抛出php错误
Server-side function throws a php error when accessed through ajax
我正在使用CodeIgniter-Bonfire的web应用程序,让网站管理员验证或不验证用户的"东西"(如姓名和工作经验)。管理员可以从下拉列表中选择"验证"或"不验证"。当下拉列表的值发生变化时,将向服务器发出ajax调用。然后,服务器向javascript回显一些值,javascript将其插入视图页面。
一切正常——数据库被相应地改变了,回显的值是正确的——但是javascript现在也捕获了来自服务器端的错误消息。
错误是:Trying to get property of non-object.
我在可能发生错误的地方前后都做了echo,但是对象打印出来的很好。我很困惑,因为这种情况以前从未发生过。
真正令人讨厌的是错误似乎是随机发生的。当验证从已验证变为未验证时,反之亦然。有时错误就在回显值之前打印出来,有时它会自动消失(但不是在显示一瞬间之前)。
提前谢谢你。
javascript是这样的:
$(document).on('change', '.verified', function(event) {
var id = $(this).attr('id');
$.ajax({
type: "POST",
url: 'http://theurl.com/module/controller/verify/100/files/24'
}).done(function(msg) {
$('#timestamp_'+id).text(msg);
});
函数验证如下:
public function verify($user_id, $other_table, $other_id)
{
$this->load->model('profile/Verifiable_items_model', 'vi_model');
$item = $this->vi_model->find_by(array(
'user_id' => $user_id,
'other_table' => $other_table,
'other_id' => $other_id
));
$update_date = 0;
if ($item->verified == 0) // ERROR HERE
{
$update_date = date('Y-m-d H:i:s', time());
$data = array('verified' => 1, 'notes_time' => date('Y-m-d H:i:s', time()), 'verified_by' => $this->current_user->username);
}
else
{
$data = array('verified' => !($item->verified), 'notes_time' => NULL); // ERROR HERE
}
$this->vi_model->update($item->id, $data);
echo $update_date;
}
由于错误行上唯一的对象是$item对象,这可能意味着该项未设置或至少不是对象(可能为null或false)。因为find_by方法返回的是第一个匹配的对象,所以我猜测过滤器根本不匹配任何东西。
你说你在前后都做了回声。你对那件事有把握吗?尝试var_dump或print_r ` ing $item,看看会得到什么结果。如果没有收到预期的对象,请验证传递给find_by函数的参数是否正确。(可能由于某些原因,user_id没有正确传递,假设这可能是cookie或会话过期或类似的东西传递)
$item->verified
是对象表示法,用于访问对象属性和方法。
我的猜测是"已验证"没有被正确定义,所以它不存在,至少不是你期望的形式。
你确定
$item
不是数组?
如果是这种情况,你可以使用数组表示法:
$item['prodname'];
但我想你比我们更清楚它是什么。
基线:可能从未定义过,或者没有定义为对象或对象内。
如果你想要更具体的答案,那么你必须给我们看剩下的代码。
还可以考虑在ajax中使用成功和完成函数:
var url = 'page.php';
$.ajax(
{
type : 'post',
url : url,
dataType : 'json',
data :
{
'requesting' : true,
},
success : function(data)
{
var success = '';
for(var i = 0; i < data.length; i++)
{
success = data[i].success;
}
},
complete : function(data)
{
}
});
你也可以抛出'error'函数。
你可以使用json返回警告消息取决于什么是成功的,什么不是。您还可以使用try catch并返回异常消息,这样您就可以更容易地找出不工作的地方。基本上你想处理这个错误,你不希望页面重新加载,所以你必须完全控制你的代码。
您可以返回一个json对象,并在服务器上创建后将其刷新到客户端:
echo json_encode($json);
flush();
错误是我的页面中有三个函数以:
$(document).on('change', '.verified', function(event) {...});
包含上面javascript的视图中有标签,每个标签执行一个模块::run,调用不同的模块/控制器/函数。这导致了三个不同的视图被排列(并因此被加载),如:files | references | other.
视图基本上做了同样的事情:让管理员验证或取消验证用户的"东西"。为了偷懒,我将一个视图中的select标签复制并粘贴到另一个视图中,这样它们看起来就像这样:
<select name='verified' class='verified' id='100'>
<option value=1>Yes</option>
<option value=0 selected = 'selected'>No</option>
</select>
(id根据项目不同而不同)。注意类名"verified"
我还复制了javascript,并只做了轻微的调整(如将url中的"文件"更改为"文档"或"其他")。因此,现在当我尝试验证id为2000的"引用"项时,显然是这样的:
$(document).on('change', '.verified', function(event) {
触发了,但这是加载了"files"选项卡的那个。因此,现在服务器端代码正在查找id为2000的"文件",该文件不存在,因此PHP错误试图访问非对象的属性。
- 巨大的数据和PHP错误
- 使用javascript ajax post方法的未定义偏移PHP错误
- JSON3中的Facebook xd_arbiter.php错误
- 设置jquery按钮,而不是php错误和成功状态
- FB.init失败,引发不间断的xd_arbiter.php错误
- 尝试开机自检“选择”HTML表单输入时出现PHP错误
- 将 png 图像从 JavaScript 传递到 PHP(错误:请求 URI 太大)
- 如何使用 javascript 来提醒这些 PHP 错误消息
- 使用 ajaxForm Jquery 插件时返回 PHP 错误
- 使用 Jquery 删除页面顶部的 PHP 错误消息
- 输入区域中出现PHP错误的新行
- Ajax和/或PHP错误
- PHP错误未定义变量:data -使用Codeigniter加载更多数据
- AJAX请求给出'undefined index'PHP错误
- PHP错误的utf-8解码json字符串时使用javascript发布
- 服务器端函数在通过ajax访问时抛出php错误
- 上传文件在PHP错误-去PHP文件不允许我选择
- XAMPP PHP错误通知:“;未定义的变量“;从HTML到PHP
- Php错误显示,而访问输入类型=文件使用jquery/ajax方法
- ajax调用脚本的Php错误