Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.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
Javascript 为什么在更新到Codeigniter 3.x之后,在ajax调用期间会出现json解析错误?_Javascript_Php_Ajax_Codeigniter - Fatal编程技术网

Javascript 为什么在更新到Codeigniter 3.x之后,在ajax调用期间会出现json解析错误?

Javascript 为什么在更新到Codeigniter 3.x之后,在ajax调用期间会出现json解析错误?,javascript,php,ajax,codeigniter,Javascript,Php,Ajax,Codeigniter,我正在将我的Codeigniter框架从2.2.6更新到3.0.6。它打破了以前有效的现有代码。具体地说,我在浏览器控制台中收到错误“SyntaxError:JSON.parse:JSON数据第2行第1列的意外字符”。我尝试查看更新时这是否是一个已知问题,但我没有看到其他人遇到此问题 下面是我正在使用的javascript: $('#addServiceItem').on('change', function() { var serviceID = $(this).val

我正在将我的Codeigniter框架从2.2.6更新到3.0.6。它打破了以前有效的现有代码。具体地说,我在浏览器控制台中收到错误
“SyntaxError:JSON.parse:JSON数据第2行第1列的意外字符”。
我尝试查看更新时这是否是一个已知问题,但我没有看到其他人遇到此问题

下面是我正在使用的javascript:

    $('#addServiceItem').on('change', function() {
        var serviceID = $(this).val();
        $.ajax({
            url: '/ajax/get_service_details/' + serviceID,
        }).done(function(data) {
            if (data.status == 'success') {
                addServiceItem(data.service);
            } else {
                alert(data.message);
            }
        });
    });
此外,以下是在ajax url中调用的函数:

public function get_service_details($serviceID = 0)
    {
        if (!$this->input->is_ajax_request()) {
            exit('No direct script access allowed');
        }

        if ($serviceID == 0) {
            header('Content-type: application/json');
            echo json_encode(array(
                'status' => 'error',
                'service' => null,
                'message' => 'We could not find the service.'
            ));
        }

        $service = $this->services_model->get_service_details($serviceID);

        header('Content-type: application/json');
        echo json_encode(array(
            'status' => 'success',
            'service' => $service,
            'message' => ''
        ));
    }

如上所述,此代码在Codeigniter的早期版本中工作。据我所知,Ajax调用返回值存在问题。在javascript中,变量数据保持未定义状态。我假设有一个语法标准已经更改。

如果您的
$serviceID==0
,那么您将收到已发送的错误
标题,因为如果您在内部输出内容而不终止代码,则在外部再次尝试设置标题

将您的代码更改为以下代码:

public function get_service_details($serviceID = 0)
{
    if (!$this->input->is_ajax_request()) {
        exit('No direct script access allowed');
    }

    if ($serviceID == 0) {
        header('Content-type: application/json');
        echo json_encode(array(
            'status' => 'error',
            'service' => null,
            'message' => 'We could not find the service.'
        ));

        // Terminate function execution
        return;
    }

    $service = $this->services_model->get_service_details($serviceID);

    header('Content-type: application/json');
    echo json_encode(array(
        'status' => 'success',
        'service' => $service,
        'message' => ''
    ));
}

检查浏览器开发人员工具的“网络”选项卡中的响应。看看里面有什么。它看起来可能会回显2个不同的JSON,因为如果
$serviceID=0
没有任何类型的死亡/返回。另一方面,当最新的3.x版本是3.1.11时,为什么要更新到3.0.6?@aynber非常感谢!通过查看,我看到一个未定义的变量错误与json数据一起传递,导致错误解释。看起来新的框架对于未定义的变量更加严格。@Vickel我正在一个现有项目上进行开发。当我开始这个项目时,我使用的是2.1.4版本,我一直在逐步进行主要的更新,而不是试图直接进入最新版本。一旦我的代码再次稳定,我将更新到3.1.11。@DMccollum随着版本的发展,框架本身对未定义变量的要求也不高也不低。但是,更改PHP版本可能会导致以前未收到的警告或通知。此外,您可能会有不同的错误报告级别(可能您的新安装仍将
开发设置为其环境,因此几乎可以对任何内容启用错误报告。