警告错误:试图访问null php类型值上的数组偏移量



从javascript代码中,我正在使用一个fetch消耗api rest,但我收到这个错误:

警告错误:试图访问null类型值上的数组偏移量php

这个api是在php中创建的。如果我从soap调用这个api, ui工作正常,但当我从javascript代码调用这个api时,收到错误:

这是javascript代码:
function compareValueKey(numInput) {
let digit_key = document.getElementById("input_compare" + numInput).value;

let configFetch = {
method: "POST",
body: "digit_key=" + digit_key + "&numInput=" + numInput,
headers: {'Content-Type': 'application/x-www-form-urleancoded'}
};
let promesa = fetch("compareValueKey.php", configFetch);
promesa.then(function(response){
if(response.ok){
console.log("Respuesta OK");
}
response.json().then(
function(objectoJSON){
let valido = objectoJSON.valido;
let numInput = objectoJSON.n;
document.getElementById("input_compare"+ numInput).nextElementSibling.innerHTML = valido;
});
}).catch(function (error){
console.log('Error con la peticion' + error.message);
});
}

这是php代码:

<?php
session_start();
$key =1111;
$data = json_decode(file_get_contents('php://input'), true);
$digit_key  =  $data['digit_key'];
$numInput  =  $data['numInput'];
if($digit_key == substr($key, $numInput - 1, 1)){
echo json_encode(array("valido" => "ok", "n" => $numInput));
}else{
echo json_encode(array("valido" => "error", "n" => $numInput));
}

,这是HTML代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script defer src="actividad06.js" pe="text/javascript"></script>
<title>Actividad 6</title>
</head>
<body class="p-5">
<div id="checkCombination">
<input type="number" id="input_compare1" onkeyup="compareValueKey(1)"><span class="msg"></span>
<input type="number" id="input_compare2" onkeyup="compareValueKey(2)"><span class="msg"></span>
<input type="number" id="input_compare3" onkeyup="compareValueKey(3)"><span class="msg"></span>
<input type="number" id="input_compare4" onkeyup="compareValueKey(4)"><span class="msg"></span>
</div>
</body>
</html>

我认为javascript代码中有错误。

你能帮我检查一下吗?

您没有发布有效的JSON格式,但您希望在PHP代码中这样做。您的POST数据是URL编码的。

下面一行将给您一个有效的JSON字符串,如{ "digit_key" : "123", "numInput" : "456" }

body: `{ "digit_key" : "${digit_key}", "numInput" : "${numInput}" }`,

更进一步,在你的PHP代码中有一个类型错误。substr函数需要一个字符串作为参数1,但是给出了一个整数$key = 1111。在较新的PHP版本中,您将遇到一个问题。对于干净的代码,使用字符串代替,它也可以在启用strict_types时工作:

$key = "1111";

最新更新