2017-05-09 1 views
0

J'utilise l'API omdb pour un projet à la maison si je recherche un film sans résultat il montre toujours les détails (titre, année, intrigue etc) et une image cassée de ma précédente recherche réussie . J'essaye d'arrêter de montrer quoi que ce soit si le film n'est pas trouvé. Est-ce possible?omdb api aucun résultat

J'ai une connaissance très limitée de Javascript et Json, mais j'essaie depuis plusieurs années et je n'arrive pas à le résoudre. Toute aide sera très appréciée.

Voici mon code avant que je foiré les choses en essayant:

var $Form = $('#omdbform'), $Container = $('#containera'); 
$Container.hide(); 
$Form.on('click', function(p_oEvent){ 
    var sUrl, sMovie, oData; 
    p_oEvent.preventDefault(); 
sMovie = $Form.find('#moviename').val(); 
    sUrl = 'https://www.omdbapi.com/?t=' + sMovie + '' 
    $.ajax(sUrl, { 
     complete: function(p_oXHR, p_sStatus){ 
      oData = $.parseJSON(p_oXHR.responseText); 
      console.log(oData); 
      $Container.find('.title').text(oData.Title); 
      $Container.find('.plot').text(oData.Plot); 
      $Container.find('.poster').html('<img src="' + oData.Poster + '" alt=""/>'); 
      $Container.find('.year').text(oData.Year); 
      $Container.find('.rated').text(oData.Rated); 
      $Container.show(); 
     } 
    });  
}); 
+0

Pourriez-vous réduire votre code more? Il semble que vous faites simplement une demande et ne récupérez pas les résultats que vous recherchez. – TankorSmash

+0

Vous devriez vérifier le corps de votre réponse. Avez-vous vérifié la page API avec votre requête échouée? –

+0

@TrankorSmash Je reçois les résultats que je veux, mais si je recherche un film qui n'a pas été trouvé, il montre toujours les détails des résultats de recherche précédents où je voudrais qu'il n'affiche rien. J'espère que cela a du sens. – Greg

Répondre

1

Sur requête a échoué cette API répond comme suit:

{"Response":"False","Error":"Movie not found!"} 

avec le code d'état 200, vous devez donc vérifier le corps de réponse.

Edit:

Vous pouvez utiliser la méthode hasOwnProperty sur l'objet et vérifier la réponse est cet objet a title propriété, puis appelez Container.show(), dans d'autres cas, ne rien faire ou afficher des informations sur aucun résultat dans DOM.

Edit 2:

oData = $.parseJSON(p_oXHR.responseText); 

if (oData.hasOwnProperty("Title")) { 
    $Container.find(".title").text(oData.Title); 
    $Container.find(".plot").text(oData.Plot); 
    $Container.find(".poster").html('<img src="' + oData.Poster + '" alt=""/>'); 
    $Container.find(".year").text(oData.Year); 
    $Container.find(".rated").text(oData.Rated); 
} else { 
    $Container.find(".error").text(oData.Response); 
} 
$Container.show(); 

Si votre conteneur serait encore a des informations sur la vidéo précédente, vous devriez probablement mettre en œuvre la méthode de compensation DOM avec je suppose que la méthode empty ou une autre méthode de la section DOM Removal.

+0

Désolé je suis toujours totalement perdu. J'ai essayé de le googler pour la dernière heure et j'ai essayé quelques trucs, mais je n'arrive pas à faire fonctionner quelque chose. – Greg

+0

Regardez ma modification. –

+0

Je vous remercie beaucoup pour votre aide et votre temps, mais c'est trop sur ma tête et je pense qu'il est temps d'admettre la défaite. La plupart des choses comme celle-ci je peux bidouiller et finalement le faire fonctionner, mais celui-ci m'a eu. – Greg