2016-12-11 5 views
1

У меня есть файл в формате JSON, JS/links.json:Использование если/другое заявление внутри каждой функции

{ "allLinks": [ 
{ 
    "Link": "http://bbc.com", 
    "Poster": "John" 
}, 
{ 
    "Link": "http://espn.com", 
    "Poster": "Jane" 
} 
...etc. 

и следующий HTML:

<input placeholder="http://" id="urlField" type="text"> 
<button type="button" id="search" name="button">Search</button> 
<div id="result"></div> 

Поведение Я хотел бы это :

  • Вы вводите ссылку на вход
  • Когда кнопка нажата, получить links.json а, rray и цикл через него.
  • Если существует связь, выход в #result: «Это существует, и была опубликована [постер]»
  • Если он не существует, выход в `#RESULT«Эта ссылка не существует.»

Это, как я пытаюсь сделать это сейчас:

$(function(){ 

    $.ajax({ 
     type : 'GET', 
     url : 'js/links.json', 
     async : false, 
     beforeSend : function(){/*loading*/}, 
     dataType : 'json', 
     success : function(jsonResult){ 

       $("#search").click(function() { 
        var searchValue = document.getElementById('urlField').value; 

        // Go through the whole list and find the Link name 
        var linkExists = false; 
        $.each(jsonResult.allLinks, function(i, obj) { 
          if (obj.Link === searchValue) { 
           linkExists = true; 
           alert("It exists"); 
           return false; 
          } 
          else { 
           linkExists = false; 
           alert("It doesn't exist"); 
           return false; 
          } 
        }); 

       }); 

     } 
    }); 
}); 

Там определенно что-то здесь не так, потому что, если я не использовать else, это, кажется, работает. Когда я добавляю его, он не всегда: «Он не существует».

Заранее благодарим за помощь.

+0

проблема, если первый элемент! == serachValue, вы будете останавливать каждую петлю (возвращая ложь) и linkExists будет ложным ... не имея блок еще действительно является действительным для вашей логики - или, по крайней мере, не возвращает false и не устанавливает linkExists = false (потому что это будет означать, что ваша логика будет успешной, только если элемент LAST соответствует –

ответ

0

Вытяните содержимое своего оператора else за пределы цикла for, иначе вы можете с ошибкой каждый раз, когда вы нажимаете на первый элемент, и это не дает соответствия.

$(function() { 
 

 
     $.ajax({ 
 
     type: 'GET', 
 
     url: 'js/links.json', 
 
     async: false, 
 
     beforeSend: function() { /*loading*/ }, 
 
     dataType: 'json', 
 
     success: function(jsonResult) { 
 

 
      $("#search").click(function() { 
 
      var searchValue = document.getElementById('urlField').value; 
 

 
      // Go through the whole list and find the Link name 
 
      var linkExists = false; 
 
      $.each(jsonResult.allLinks, function(i, obj) { 
 
       if (obj.Link === searchValue) { 
 
       linkExists = true; 
 
       alert("It exists"); 
 
       return false; 
 
       } 
 

 
      }); 
 
      if (!linkExists) { 
 
       alert("It doesn't exist"); 
 
       return false; 
 
      } 
 

 
      }); 
 

 
     } 
 
     }); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

, который обеспечил бы, что linkExists является ложным –

+0

нет, потому что что возврат просто останавливает каждый цикл - возврат во внутреннюю функцию не возвращается из внешней функции - JS 101 –

+0

Спасибо, это было полезно! Почему «еще» не работает как часть моей реализации? – user2383338

Смежные вопросы