нужна помощь с вложенной функцией jquery - PullRequest
0 голосов
/ 13 июля 2010

Пожалуйста, найдите мой код ниже.Моя проблема в том, что я внутренний jQuery.get () не выполняется.Может ли кто-нибудь помочь мне с этим?

jQuery(document).ready(function() { 
   $('.error').hide();  
   $(".button").click(function() {  
    // validate and process form here
      $('.error').hide();  
      var zipCode = $("input#name").val();  
      if (zipCode == "") {  
        $("label#name_error").show();  
        $("input#name").focus();  
        return false;  
      }
    var key = 'ac9c073a8e025308101307';
    var noOfDays = 5;
    var url = 'http://www.worldweatheronline.com/feed/weather.ashx?q=' + zipCode + '&format=json&num_of_days=' + noOfDays + '&key=' + key;
    alert(url); 
    jQuery.get(url, function(test) { 
    alert(url); 
        $.each(test.data.weather, function(i, item){
        $("body").append("<p>Date: "+item.date+"</p>");
        if ( i == 3 ) return false;
  }); }, 'jsonp')();
});  
}); 

Моя HTML-форма выглядит так:

<div id="contact_form">  
 <form name="contact" action="">  
   <fieldset>  
     <label for="name" id="name_label">Name</label>  
     <input type="text" name="name" id="name" size="30" value="" class="text-input" />  
     <label class="error" for="name" id="name_error">This field is required.</label>  

     <br />  
     <input type="submit" name="submit" class="button" id="submit_btn" value="Send" />  
   </fieldset>  
 </form>  
</div>  

Я очень ценю любые указатели.

Спасибо!

Ответы [ 4 ]

4 голосов
/ 14 июля 2010

Проблема, с которой вы сталкиваетесь, заключается в том, что вы ничего не делаете для того, чтобы помешать отправке формы, поэтому она отправляет форму прежде, чем получит возможность получить данные с worldweatheronline.com.

Измените свой обработчик кликов, чтобы он был таким:

    $(".button").click(function(event) { 
        event.preventDefault();

Вот мой законченный пример кода, который работает так, как вы хотите:

<html>
<head>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'></script>
<script type='text/javascript'>
    jQuery(document).ready(function() { 
        $('.error').hide();  
        $(".button").click(function(event) { 
            event.preventDefault();
            // validate and process form here
            $('.error').hide();  
            var zipCode = $("input#name").val();  
            if (zipCode == "") {  
                $("label#name_error").show();  
                $("input#name").focus();  
                return false;  
            }
            var key = 'ac9c073a8e025308101307';
            var noOfDays = 5;
            var url = 'http://www.worldweatheronline.com/feed/weather.ashx?q=' + zipCode + '&format=json&num_of_days=' + noOfDays + '&key=' + key;

            alert('first'+url); 

            jQuery.get(url, function(test) { 
                alert(url); 
                $.each(test.data.weather, function(i, item){
                    $("body").append("<p>Date: "+item.date+"</p>");
                    if ( i == 3 ){
                        return false;
                    }
                }); 
            }, 'jsonp');
        });  
    });
</script>
</head>
<body>
<div id="contact_form">  
 <form name="contact" action="">  
   <fieldset>  
     <label for="name" id="name_label">Name</label>  
     <input type="text" name="name" id="name" size="30" value="" class="text-input" />  
     <label class="error" for="name" id="name_error">This field is required.</label>  

     <br />  
     <input type="submit" name="submit" class="button" id="submit_btn" value="Send" />  
   </fieldset>  
 </form>  
</div>  
</body>
</html>
2 голосов
/ 14 июля 2010

Включите Fiddler или Firebug и наблюдайте, как выходит HTTP-вызов. Там вы увидите сообщение об ошибке HTTP. Кроме того, включите консоль в Chrome или Firefox, чтобы увидеть потенциальную ошибку JavaScript.

1 голос
/ 14 июля 2010

Частично проблема может заключаться в дополнительном наборе скобок после вызова функции .get ().У вас есть:

jQuery.get(url, function(test) { 
    alert(url); 
    $.each(test.data.weather, function(i, item){
    $("body").append("<p>Date: "+item.date+"</p>");
    if ( i == 3 ) return false;
}); }, 'jsonp')();

Должно быть:

jQuery.get(url, function(test) { 
    alert(url); 
    $.each(test.data.weather, function(i, item){
        $("body").append("<p>Date: "+item.date+"</p>");
        if ( i == 3 ) return false;
    }); 
}, 'jsonp');
0 голосов
/ 14 июля 2010

Я собираюсь выйти на конечность и предположить, что (основываясь на URL 'http://www.worldweatheronline.com/feed/weather.ashx?q='), что вы пытаетесь выполнить AJAX-запрос к внешнему сайту.Это нарушает ту же политику домена и молча завершится ошибкой.

...