ข้อมูลคำขอโพสต์ Angularjs $http และการตอบกลับพร้อมข้อผิดพลาดที่ไม่ได้กำหนด

ฉันต้องการรับค่าเฉพาะจากฝั่งเซิร์ฟเวอร์ ดังนั้นฉันจึงใช้ $http เพื่อส่งผ่านตัวแปรจากส่วนหน้า (Angularjs javascript) ไปยังแบ็กเอนด์ (php) หลังจากฝั่งเซิร์ฟเวอร์ (php) รับค่าจากส่วนหน้า มันจะเรียกใช้แบบสอบถาม sql เพื่อรับข้อมูลจาก mysql และส่งคืนข้อมูลไปยังส่วนหน้า อย่างไรก็ตาม ในคอนโซลส่วนหน้าของฉัน มันแสดงข้อผิดพลาดที่ไม่ได้กำหนด ต่อไปนี้เป็นรหัสของฉัน:

จาวาสคริปต์ส่วนหน้า

$http({
    method: "post",
    url: "http://localhost/php/UpdateLastLogin.php",
    data: {
        user_name: user_name,
        CurrentTimestamp: CurrentTimestamp
        },
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).success(function(response) {
    console.log(response);
}).error(function(response) {
    console.log(response);
});

PHP แบ็กเอนด์

<?php
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Credentials: true");
    header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
    header("Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With");
    header('P3P: CP="CAO PSA OUR"'); 
    header("Content-Type: application/json; charset=utf-8");


    $postdata = file_get_contents("php://input");
    $request = json_decode($postdata);
    @$CurrentTimestamp = $request->CurrentTimestamp;
    @$user_name = $request->user_name;

    $servername = "localhost";
    $username = "jack";
    $password = "1234";
    $dbname = "daikinchat";

    $CurrentTimestamp = '"' . $CurrentTimestamp . '"';
    //$user_name = '"' . $user_name . '"';
    $user_name = "Lisa Wong";

    $conn = new mysqli($servername, $username, $password, $dbname);
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }

    $query = "SELECT last_login_timestamp FROM user_directory WHERE username = '$user_name'";
    $result = mysqli_query($conn, $query);
    $row = mysqli_fetch_row($result);

    echo $row[0];

?>

person Chan Yoong Hon    schedule 10.10.2016    source แหล่งที่มา
comment
บรรทัดไหนแสดง?   -  person Sajeetharan    schedule 10.10.2016
comment
ข้อผิดพลาด @Sajeetharan (ฟังก์ชัน (ตอบกลับ) { console.log (ตอบกลับ);}   -  person Chan Yoong Hon    schedule 10.10.2016
comment
ลองประเภทเนื้อหา application/json ในคำขอ $http ของคุณ   -  person Divyesh Savaliya    schedule 10.10.2016


คำตอบ (1)


ปัญหาอาจอยู่ในการโทร $http ของคุณ การโทร $http ของฉันมีลักษณะดังนี้:

$http({
            method: 'post',
            url:'http://localhost/php/UpdateLastLogin.php',
            data: {...},
            config: 'Content-Type: application/json;'
        }).then(function (response) {
            console.log(response);
        }, function (response) {
            console.log(response);
        });

หากฉันจำไม่ผิด คุณสามารถใช้ทั้งสองอย่าง ส่วนหัวหรือการกำหนดค่าได้ แต่ดูเหมือนว่าคุณจะใช้ส่วนหัวแอตทริบิวต์ไม่ถูกต้อง เอกสารระบุว่า:

  • ส่วนหัว – {function([headerName])} – ฟังก์ชันตัวรับส่วนหัว
  • config – {Object} – วัตถุการกำหนดค่าที่ใช้ในการสร้างคำขอ

ดังนั้นลองเปลี่ยน 'ประเภทเนื้อหา' ของคุณเป็น 'application/json' เพราะนั่นคือสิ่งที่คุณกำลังส่งเนื้อหาคำขอ http ของคุณ หากไม่ได้ผล ให้เปลี่ยนส่วนหัวเพื่อกำหนดค่าเพื่อทดสอบ

ถ้ามันไม่ทำงาน ฉันจะใช้เครื่องมือใดๆ เช่น 'บุรุษไปรษณีย์' เพื่อตรวจสอบ API และตรวจสอบให้แน่ใจว่ามันใช้งานได้ และลองแก้ไขโค้ด PHP (ฉันไม่สามารถช่วยคุณในส่วนนี้ได้)

person Alberto Martinez    schedule 10.10.2016
comment
ฉันคิดว่าปัญหาหลักคือฉันโพสต์วัตถุไปที่แบ็กเอนด์ แต่ใน php echo ของฉันเป็นสตริงแทนที่จะเป็นวัตถุ ดังนั้นจึงออกมาพร้อมกับ SyntaxError: Unexpected token a ใน JSON ที่ตำแหน่ง 0 การตอบสนองของฉันสามารถยอมรับ String ได้หรือไม่ - person Chan Yoong Hon; 10.10.2016
comment
คุณสามารถใช้ JSON.stringfy(json_object) เพื่อรับสตริง และใช้ JSON.parse(string_object) เพื่อรับ json อีกครั้งจากสตริงนั้น ดังนั้นตรวจสอบให้แน่ใจว่าคุณได้ส่งวัตถุไปยัง json หรือสตริงก่อนใช้งาน ... - person Alberto Martinez; 10.10.2016
comment
ฉันเพิ่งสังเกตเห็นว่า แก้ไขการโทร $http ของคุณ ใช้อันนี้: ` $http({ method: post, url: localhost /php/UpdateLastLogin.php, ข้อมูล: { user_name: user_name, CurrentTimestamp: CurrentTimestamp }, ส่วนหัว: { 'Content-Type': 'application/json' } }.then(function (response) { console.log (ตอบกลับ); } ฟังก์ชั่น (ตอบกลับ) { console.log (ตอบกลับ); }); ` - person Alberto Martinez; 10.10.2016