2013-08-06 1 views
0

У меня есть приложение, которое позволяет пользователям заполнять форму, содержащую ссылку на YouTube. Много раз, ссылка на видео недействительна, и я должен ее исправить вручную. Я хочу проверить URL-адрес, прежде чем я позволю пользователю отправить форму.Как обрабатывать ответ 400 из ответа gtata youtube?

Я написал код на Firebug консоли:

function test() { 
// var x1 = "http://gdata.youtube.com/feeds/api/videos/OvcaXrWFM2Q"; 
    var x1 = "http://gdata.youtube.com/feeds/api/videos/VIDEO_ID?alt"; 
    var asd = false; 
    $.ajax({ 
     dataType: 'jsonp', 
     async: false, 
     url: x1, 
/*  success: function(data) { 
      console.log("success --> ", data.length); 
      return true; 
     }, 
     error: function(error) { 
      console.log("error --> ", error); 
     }, 
*/  complete: function(e){ 
      console.log("complete --> ", e); 
      return true; 
     } 
    }); 

// return false ; 
    return asd; 
} 


var y = test(); 

if (y) { 
    console.log("success y --> " + y); 
} else { 
    console.log("error y --> " + y); 
} 

Invalid 400 запрос:

>>> function test() { // var x1 = "http://gdata.y...} else {  console.log("error y --> " + y); } 

error y --> false 
"NetworkError: 400 Bad Request - http://gdata.youtube.com/feeds/api/videos/VIDEO_ID?alt&callback=jsonp1375741532312&_=1375800027900" 

Действительный ответ:

>>> function test() {  var x1 = "http://gdata.you...} else {  console.log("error y --> " + y); } 

error y --> false 
success --> 4516 
jquery....min.js (line 29) 
complete --> undefined 
jquery....min.js (line 29) 

Что я могу сделать, чтобы поймать, что 400? Кроме того, кажется, что код попадает в «console.log (« success y -> »+ y); прежде чем он достигнет успеха: function().

Edit:

Мой другой вариант, чтобы отправить эту проверку бакэнду с помощью Java, но я предпочел бы его с помощью JS.

public static void main(String[] args) throws ParseException { 
     String[] urls = new String[2]; 
     urls[0] = "http://gdata.youtube.com/feeds/api/videos/OvcaXrWFM2Q"; 
     urls[1] = "http://gdata.youtube.com/feeds/api/videos/23487978923789423789342sufyu"; 
     HttpURLConnection con; 
     HttpURLConnection.setFollowRedirects(false); 
     for (String url : urls) { 
      try { 
       con = (HttpURLConnection) new URL(url).openConnection(); 
       con.setRequestMethod("HEAD"); 
       System.out.println(con.getResponseCode()); 
      } catch (IOException e) { 
       System.out.println(e); 
      } 
     } 
    } 

Выход Я получаю, как ожидалось, 200 для действительного идентификатора видео, 400 для недействительного.

ответ

0

Чтобы получить код статуса ответа, мне пришлось переместить чек на backend java. Javascript просто не мог этого сделать.

public static void main(String[] args) throws ParseException { 
     String[] urls = new String[2]; 
     urls[0] = "http://gdata.youtube.com/feeds/api/videos/OvcaXrWFM2Q"; 
     urls[1] = "http://gdata.youtube.com/feeds/api/videos/23487978923789423789342sufyu"; 
     HttpURLConnection con; 
     HttpURLConnection.setFollowRedirects(false); 
     for (String url : urls) { 
      try { 
       con = (HttpURLConnection) new URL(url).openConnection(); 
       con.setRequestMethod("HEAD"); 
       System.out.println(con.getResponseCode()); 
      } catch (IOException e) { 
       System.out.println(e); 
      } 
     } 
    }