2013-11-18 2 views
-2

Почему я не могу предупредить значение x после этого запроса ajax? Работаю с функцией ошибки.Значение предупреждения Javascript после запроса ajax

  var x; 

    $.ajax({ 
     url: 'http://gdata.youtube.com/feeds/api/videos/' + code, 
     type: 'get', 
     dataType: 'json', 
     success: function(data) { 
      console.log('Result 1: '); 
      console.log(data.responseText); 
     }, 
     error: function(e) { 
      var text = e.responseText; 

      parser = new DOMParser(); 
      xmlDoc = parser.parseFromString(text, "text/xml"); 

      var titleXml = xmlDoc.getElementsByTagName('title')[0]; 
      var contentXml = xmlDoc.getElementsByTagName('content')[0]; 

      title = titleXml.childNodes[0]; 
      content = contentXml.childNodes[0]; 

      x = title; 

     } 
    }); 

    alert(x); 

если я делаю предупреждение локальным в функции ошибки, все работает нормально, но мне нужно предупредить значение x после ajax.

+1

Вы не можете вызвать айхакс-вызов асинхронным способом –

+0

@PhilipG да, вы можете –

+0

, не меняя настройки ajax, т. Е. Не выполняя вызов, поскольку задан вопрос. В его вопросе звонок выполняется асинхронно. Вот почему он не может! –

ответ

2
$.ajax({ 
     url: 'http://gdata.youtube.com/feeds/api/videos/' + code, 
     type: 'get', 
     dataType: 'json', 
     success: function(data) { 
      console.log('Result 1: '); 
      console.log(data.responseText); 
      alert(x); 
//   ^^^^^^^^when get any success then use alert on ajax success 
     }, 
     error: function(e) { 
      var text = e.responseText; 

      parser = new DOMParser(); 
      xmlDoc = parser.parseFromString(text, "text/xml"); 

      var titleXml = xmlDoc.getElementsByTagName('title')[0]; 
      var contentXml = xmlDoc.getElementsByTagName('content')[0]; 

      title = titleXml.childNodes[0]; 
      content = contentXml.childNodes[0]; 

      x = title; 
      alert(x); 
//   ^^^^^^^^when get any error then use alert on ajax error 

     } 
    }); 
+0

Эта работа! Благодарю. –

+0

спасибо :) @ LubomurMarshal чувствует себя счастливым, его работы для вас –

0

Попробуйте этот код пожалуйста:

  var x; 

$.ajax({ 
    url: 'http://gdata.youtube.com/feeds/api/videos/' + code, 
    type: 'get', 
    dataType: 'json', 
    success: function(data) { 
     x = 0; 
     console.log('Result 1: '); 
     console.log(data.responseText); 
    }, 
    error: function(e) { 
     var text = e.responseText; 

     parser = new DOMParser(); 
     xmlDoc = parser.parseFromString(text, "text/xml"); 

     var titleXml = xmlDoc.getElementsByTagName('title')[0]; 
     var contentXml = xmlDoc.getElementsByTagName('content')[0]; 

     title = titleXml.childNodes[0]; 
     content = contentXml.childNodes[0]; 

     x = title; 

    } 
}); 

alert(x); 

Что ваша ошибка?

+0

0, конечно - это асинхронно. – Ian

+0

Предыдущее решение работает, спасибо за помощь. –

+1

@ Неправильно, предупреждение будет указывать 'undefined'. – Christoph

1

Функции ошибки или успеха вызываются в случае ошибки или успеха запроса Ajax, когда он завершается, поэтому код, который присваивает значение x, не был бы выполнен, если вы будете вызывать предупреждение за пределами функций.

Значение x назначается после завершения запроса, поэтому оно работает, если вы его предупредили внутри функции ошибки.

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