Ассоциативный массив с массивом javascript не распознается как массивPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Ассоциативный массив с массивом javascript не распознается как массив

Сообщение Anonymous »

У меня есть ряд скриптов PHP API, которые почти во всех случаях возвращают ассоциативный массив вызывающему приложению.
PHP:

Код: Выделить всё

$returnInfo = array() ;
$returnInfo[] = array("success"=>true,"key1"=>"value1","key2"=>"value2",...) ;

//Then at the end of the API:
sendResponse(200,json_encode($returnInfo)) ;

function sendResponse($status, $body) {
$status_header = 'HTTP/1.1 ' .$status. ' ' .getStatusCodeMessage($status);
header($status_header);
header('Content-type: application/json');
echo $body;
}
После недавнего обновления с PHP 7.3 до 8.2 мое приложение начало сообщать о непоследовательных ошибках при вызовах PHP API. Большую часть времени один и тот же вызов API работает нормально, но иногда происходит сбой. Из приложения HTTP-вызов проверяет наличие ответа 200 И является ли возвращаемые данные МАССИВОМ или ОБЪЕКТОМ. Во всех случаях мое приложение фактически сообщает: 200 Получен успешный ответ. Затем, в зависимости от того, является ли ответ.данные МАССИВОМ или ОБЪЕКТОМ, выполните X или Y.
Приложение лишь изредка сообщает об ошибке, если данные представляют собой МАССИВ.

Код: Выделить всё

function objArray(val,type) {
//type = 1 = object
//       2 = array
if (type == 1) {
return (!!val) && (val.constructor === Object) ;
} else if (type == 2) {
return (!!val) && (val.constructor === Array) ;
}
}

var baseUrl = "https://api.example.com/apiFile.php" ;
var req = {
method: 'POST',
url: baseUrl,
timeout:httpTimeout,
headers: headers,
data: JSON.stringify(dataObj)
}

return $http(req)
.then(function(response){
if (response.status == 200 && objArray(response.data,2)) {
...
... do stuff with response
...
} else {
var err = resError(req,response) ;
err.callBack = "Success" ;
throw err ;
}
Когда приложение получает данные правильно, я возвращаю response.data[0] исходной вызывающей функции, чтобы приложение (и пользователь) могли продолжить работу.
Но когда происходит ошибка throw ;, он вызывает другой сценарий API, чтобы отправить подробную информацию об ошибке на мой сервер. Зафиксирована ошибка (с некоторыми другими пользовательскими сообщениями):

Код: Выделить всё

   status = 200
statusText = SUCCESS RESPONSE ERROR: OK
callBack = Success
Поскольку API возвращает 200, я знаю, что ответ response.status == 200 верен, но тогда это должно означать, что objArray(response.data, 2) НЕ возвращает TRUE, что приводит к тому, что часть else процесса ответа затем выдает ошибку.
Это началось только после обновления с PHP 7.3 — PHP 8.2. Так что же изменилось... или стало более строгим и/или менее снисходительным... в PHP 8.2, из-за чего мое приложение иногда видит ответ.data не как массив?

Подробнее здесь: https://stackoverflow.com/questions/791 ... d-as-array
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»