2013-06-26 3 views
1

Я использую следующий код, чтобы сделать запрос междоменного AJAX с YQL:
Попадая ничего, делая Междоменный запрос AJAX с YQL

function requestCrossDomain(site, callback) { 

function cbFunc(data) { 
// If we have something to work with... 
alert("inside call back"); 
if (data.results[0]) { 
    // Strip out all script tags, for security reasons. 
    // BE VERY CAREFUL. This helps, but we should do more. 
    data = data.results[0].replace(/<script[^>]*>[\s\S]*?<\/script>/gi, ''); 

    // If the user passed a callback, and it 
    // is a function, call it, and send through the data var. 
    if (typeof callback === 'function') { 
     callback(data); 
    } 
} 
// Else, Maybe we requested a site that doesn't exist, and nothing returned. 
else throw new Error('Nothing returned from getJSON.'); 
} 
// If no url was passed, exit. 
if (!site) { 
    alert('No site was passed.'); 
    return false; 
} 

// Take the provided url, and add it to a YQL query. Make sure you encode it! 
var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from html where url="' + site + '"') + '&format=xml&callback=cbFunc'; 

// Request that YSQL string, and run a callback function. 
// Pass a defined function to prevent cache-busting. 
$.getJSON(yql, cbFunc); 
console.log("outside call back"); 

} 

и вызов выше следующим образом:
requestCrossDomain('http://www.cnn.com', function(results) {
alert(results);
});

Когда я запускаю приведенный выше код в firefox, хотя ответ (в консоли firebug) показывает содержимое веб-сайта внутри функции обратного вызова (cbFunc), но показывается как предупреждение.
Также результат console.log("inside call back") в строке 5 не печатает в консоли firebug.

Может ли кто-нибудь предложить мне, где все идет не так, или какое-либо объяснение выше?
кстати я уже прошли через:
http://tek-insight.blogspot.in/2010/05/cross-domain-ajax-request-proxy-json.html http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-domain-ajax-request-with-yql-and-jquery/ Возможное объяснение в соответствующих вопросах StackOverflow.

ответ

1

$.getJSON принимает функцию обратного вызова для ответа «успех». Но если ошибка была возвращена (404, 500 и т. Д.), То она не будет вызывать эту функцию.
Вам необходимо добавить дополнительные функции, чтобы поймать другие сценарии ответов:

$.getJSON(yql, cbFunc) 
    .done(function() { console.log("second success"); }) 
    .fail(function(jqxhr, textStatus, error) { console.log("error", textStatus, error); }) 
    .always(function() { console.log("complete"); }); 
+0

она показывает «ошибка» и «полный» в консоли. можете ли вы объяснить, почему? –

+0

Это означает, что ответ не возвращал заголовок успеха с кодом 200, но возвращал что-то еще. Я изменил ответ выше, который теперь содержит дополнительные поля в обратном вызове, которые вы можете проверить. – moka

+0

показывает: "error parsererror SyntaxError {}" –