Also das JSON-Objekt, das ich versuche zu erreichen, existiert manchmal nicht.JSON gelegentlich undefined - wie überprüfe ich?
Notice: Undefined index: Filme in C: \ xampp \ htdocs \ Beispiel \ game.php
Ich bin für sie in dem Steam-API mit diesem Code auf game.php erreicht:
$GLOBALS['gameTrailer'] = $game_json[$trimmed]['data']['movies'][0]['webm']['max'];
echo json_encode(array(
'gameTrailer' => $GLOBALS['gameTrailer'],
//+ other variables
));
ich bin mit AJAX zu stoßen game.php wie so auf index.php:
function returnGame() {
$.ajax({
url: "game.php",
type: "post",
dataType: 'json',
success: function(data){
console.log(data);
$('#video').removeAttr('src');
///// Game name /////
$('#gameName').html(data.gameName);
/////////////////////
////// Append and load video /////
var videoSrc = data.gameTrailer;
var video_block = $('#video');
if (videoSrc !== null && videoSrc !== undefined) {
video_block.load();
document.querySelector('video').src = videoSrc;
} else {
$("#gameTrailer").find("#gameScreenshot").attr("src", data.gameScreenshot);
}
//////////////////////////////////
},
});
}
Wenn Filme null ist, t Die AJAX-Funktion tut nichts. Das Video wird nicht leer und der Filmtitel wird nicht auf etwas Neues aktualisiert. Wenn Filme nicht undefiniert sind, funktioniert es perfekt.
Ich kann nicht scheinen, $GLOBALS['gameTrailer']
als undefined zu fangen und wiederholen oder ersetzen mit Screenshot statt Film aber nicht auf game.php oder index.php. Ich habe Dinge wie if(empty())
{} und if($GLOBALS['gameTrailer'] == NULL) {}
versucht, aber obwohl der Fehlercode auf Spiel.php mir sagt, dass es undefiniert ist, scheint es zu handeln, als ob es nicht ist.
Alle Ideen werden sehr geschätzt. Vielen Dank.
EDIT: Voll game.php Code:
<?php
if(isset($_POST)) {
fetchGame();
}
function fetchGame() {
////////// ID-picker //////////
$f_contents = file("steam.txt");
$url = $f_contents[mt_rand(0, count($f_contents) - 1)];
$answer = explode('/',$url);
$gameID = $answer[4];
$trimmed = trim($gameID);
////////// Fetch game //////////
$json = file_get_contents('http://store.steampowered.com/api/appdetails?appids='.$trimmed);
$game_json = json_decode($json, true);
////////// Store variables //////////
$GLOBALS['gameName'] = $game_json[$trimmed]['data']['name'];
$GLOBALS['gameTrailer'] = $game_json[$trimmed]['data']['movies'][0]['webm']['max'];
$GLOBALS['gameScreenshot'] = $game_json[$trimmed]['data']['screenshots'][0]['path_full'];
$GLOBALS['gameImage'] = $game_json[$trimmed]['data']['header_image'];
$GLOBALS['gameId'] = $trimmed;
$GLOBALS['free'] = $game_json[$trimmed]['data']['is_free'];
$GLOBALS['price'] = $game_json[$trimmed]['data']['price_overview']['final'];
if(!isset($GLOBALS['price']) && ($GLOBALS['gameTrailer'])) {
fetchGame();
}
if ($GLOBALS['free'] === TRUE) {
$GLOBALS['final_price'] = "Free";
} elseif($GLOBALS['free'] === FALSE || $GLOBALS['final_price'] != NULL) {
$GLOBALS['final_price'] = $GLOBALS['price'];
} else {
$GLOBALS['final_price'] = "-";
}
}
////////// Return to AJAX (index.php) //////////
echo
json_encode(array(
'gameName' => $GLOBALS['gameName'],
'gameTrailer' => $GLOBALS['gameTrailer'],
'gameImage' => $GLOBALS['gameImage'],
'gameId' => $GLOBALS['gameId'],
'finalPrice' => $GLOBALS['final_price'],
'gameScreenshot' => $GLOBALS['gameScreenshot']
))
;
?>
Es bricht auf der Leitung 23 ($GLOBALS['gameTrailer'] = $game_json[$trimmed]['data']['movies'][0]['webm']['max'];
als undefinierten Index)
'Array_key_exists' wird für solche Zwecke verwendet. – lolbas
Oder "isset" ich finde, wird häufiger verwendet. –
@JonStirling hängt von den Bedürfnissen der OPs ab. [Siehe den Unterschied hier.] (Http://stackoverflow.com/a/700257/3745677) – lolbas