Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过ajax访问时,服务器端函数抛出一个php错误_Php_Javascript_Jquery_Ajax_Jquery Ui Tabs - Fatal编程技术网

通过ajax访问时,服务器端函数抛出一个php错误

通过ajax访问时,服务器端函数抛出一个php错误,php,javascript,jquery,ajax,jquery-ui-tabs,Php,Javascript,Jquery,Ajax,Jquery Ui Tabs,我将CodeIgniter Bonfire用于一个web应用程序,该应用程序允许站点管理员验证或取消验证用户的“资料”(如姓名和工作经验)。管理员可以从下拉列表中选择“验证”或“未验证”。当下拉列表的值更改时,将对服务器进行ajax调用。然后服务器向javascript回显一些值,javascript将其插入到视图页面中 一切正常——数据库也相应地发生了更改,回显的值是正确的——但是javascript现在也捕获了来自服务器端的错误消息 错误是:试图获取非对象的属性。 我在错误发生之前和之后都做

我将CodeIgniter Bonfire用于一个web应用程序,该应用程序允许站点管理员验证或取消验证用户的“资料”(如姓名和工作经验)。管理员可以从下拉列表中选择“验证”或“未验证”。当下拉列表的值更改时,将对服务器进行ajax调用。然后服务器向javascript回显一些值,javascript将其插入到视图页面中

一切正常——数据库也相应地发生了更改,回显的值是正确的——但是javascript现在也捕获了来自服务器端的错误消息

错误是:
试图获取非对象的属性。

我在错误发生之前和之后都做了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);
});
函数verify如下所示:

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;
}
<select name='verified' class='verified' id='100'>
    <option value=1>Yes</option>
    <option value=0 selected = 'selected'>No</option>
</select>

由于错误行上唯一的对象是$item对象,这可能意味着该项未设置或至少不是一个对象(可能为null或false)。由于find_by方法返回第一个匹配的对象,我猜筛选器根本不匹配任何内容

但是,您确实说您在前后都做了回音。您确实确定吗?尝试对$item进行var_dump'ing或print_r'ing,看看结果如何。如果您没有收到预期的对象,请验证您传递给find_by函数的参数是否正确。(可能由于某些原因,用户_id没有正确传递,假设可能是某个cookie或会话传递的内容已过期或类似的内容)

是对象表示法,用于访问对象属性和方法

我的猜测是“已验证”没有正确定义,因此它不存在,至少没有以您期望的形式存在

你确定吗

$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)
    {
    }
});

错误在于,我的页面中有三个以以下开头的函数:

$(document).on('change', '.verified', function(event) {...});
包含上述javascript的视图中有多个选项卡,每个选项卡都有一个modules::run,调用不同的modules/controller/functions。这导致了三个不同的视图被排列(并因此被加载),如:files | references | other

视图基本上做了相同的事情:让管理员验证或取消验证用户的“东西”。在我的懒惰之旅中,我将选择标记从一个视图复制并粘贴到其他视图中,因此它们看起来都是这样的:

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;
}
<select name='verified' class='verified' id='100'>
    <option value=1>Yes</option>
    <option value=0 selected = 'selected'>No</option>
</select>

已触发,但这是使用“文件”选项卡加载的。因此,现在服务器端代码正在查找“文件”id为2000,但不存在,因此尝试访问非对象的属性时出现PHP错误。

您确定
verified
是正确的属性名称吗?@RicardoLohmann是。对象如下所示:[id]=>130[user\u id]=>101[other\u table]=>profile\u files[other\u id]=>99[verified]=>0[verified_by]=>admin2[notes]=>需要验证[notes_time]=>[user_notes]=>这已得到回答。请参见下文。find_by肯定会在数据库中找到记录。
stdClass对象([id]=>130[user_id]=>27[other_table]=>profile_文件[other_id]=>44[verified]=>0[verified_by]=>admin2[notes]=>需要验证[notes\u time]=>[user\u notes]=>)
我还需要包含哪些代码的其他部分?由$item组成的代码。我已经找出了错误。感谢您花时间!Yw,错误是什么?
$(document).on('change', '.verified', function(event) {