PHP API + jQuery AJAX调用JSON语法错误

时间:2018-01-11 01:06:06

标签: javascript php jquery ajax oop

我正在尝试创建一个使用API​​来存储数据库中的信息的表单。

但文件 app.php 它没有返回任何内容。我可以处理API与数据库进行通信。

我在我的前端窗体的Developer Extension中收到此错误:

  

语法错误:JSON.parse: JSON数据第1行第1列的意外数据结尾

仅仅是为了测试,我尝试在 app.php 中执行var_dump($response); die;,它会正确显示文本。

我的 app.php

<?php

namespace App;

require 'autoload.php';

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_REQUEST['action'])) {
    switch ($_REQUEST['action']) {
        case 'set':
            $data = new Data;
            $data->name  = $_REQUEST['name'];
            $data->email = $_REQUEST['email'];
            $data->phone = $_REQUEST['phone'];

            header('Content-Type: application/json');
            $response['id'] = $data->save();

            return json_encode($response);
            break;

        default:
            header("HTTP/1.0 404 Not Found");
            break;
    }
} else {
    header("HTTP/1.0 404 Not Found");
}

我的app.js文件:

    var data = {
        name: name,
        email: email,
        phone: phone,
        action: 'set'
    };

    var sentData = sendData(data);

    if(sentData) {
        alert("OK");
        resetFields();
    } else {
        alert("NOT OK");
    }

function sendData(data) {
    $.ajax({
        url: 'app/app.php',
        method: 'POST',
        data: data,
        dataType: 'json',
        success: function(response) {
            return response;
        },
        error: function(xhr, status, error) {
            return xhr.responseText
        }
    })
}

那么,错误在哪里?我提前感激。

1 个答案:

答案 0 :(得分:1)

不应使用return,而应该回显你的json,如果它是脚本执行的结束,你可以使用exit

<?php

namespace App;

require 'autoload.php';

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_REQUEST['action'])) {
    switch ($_REQUEST['action']) {
        case 'set':
            $data = new Data;
            $data->name  = $_REQUEST['name'];
            $data->email = $_REQUEST['email'];
            $data->phone = $_REQUEST['phone'];

            header('Content-Type: application/json');
            $response['id'] = $data->save();

            exit(json_encode($response));
            break;

        default:
            header("HTTP/1.0 404 Not Found");
            break;
    }
} else {
    header("HTTP/1.0 404 Not Found");
}