2012-03-30 2 views
0

Я пишу диагностический сайт для тестирования наших методов сервера.
Одна из вещей, которые я хотел бы увидеть, это код состояния HTTP и возвращаемая фактическая полезная нагрузка.

Когда я делаю запрос CORS с использованием $ .ajax, я вижу jqXhr.responseText, чтобы увидеть полезную нагрузку, но когда я использую $ .getJSON для запроса JSONP, jqXhr.responseText не определен.

Есть ли способ увидеть полезную нагрузку HTTP при использовании $ .getJSON с jsonp?

Получите jqXhr.responseText по запросу jQuery getJSON, используя JSONP

function callJavascript(url, callback) { 
    var closedData; 
    var jqXhr = $.getJSON(url, function (data) { 
     closedData = data; 
    }) 
    .success(function() { 
     $('#statusCode').text(jqXhr.status); //200 
     $('#statusText').text(jqXhr.statusText); //success 
     //this is undefined 
     $('#responseText').text(jqXhr.responseText); 
     callback(closedData); 
    }); 
}; 


function someCall() 
{ 
    var callback = function(data) { 
     //snip... will pop UI with json object returned 
    }; 
    callJavascript('http://myurl?callback=?', callback); 
}; 

ответ

5

Я предлагаю использовать .done вместо .success из-за устаревания.

В обратном вызове .success (или .done) имеются три параметра: проанализированный текст ответа, текст состояния и объект xhr.

function callJavascript(url, callback) { 
    var closedData; 
    $.getJSON(url, function (data) { 
     closedData = data; 
    }) 
    .done(function(parsedResponse,statusText,jqXhr) { 
     $('#statusCode').text(jqXhr.status); //200 
     $('#statusText').text(jqXhr.statusText); //success 
     //this should not be undefined 
     $('#responseText').text(jqXhr.responseText); 
     console.log(parsedResponse); 
     callback(closedData); 
    }); 
}; 

Вот скрипка, где вы можете увидеть полный console.log аргументов.

http://jsfiddle.net/SDUEj/

+0

Да, в этом jsfiddle responseText заполняется, но только при использовании jsfiddle эхо конечной точки. если я изменю его, чтобы использовать мой, он не определен. Я даже могу использовать свой старый метод для получения responseText (где .success закрывается вокруг jqXhr), используя/echo/jsonp/... Единственное отличие, которое я вижу, это то, что при переходе на мой url я являюсь междоменным. Может ли это быть частью политики одного и того же происхождения в Chrome? – csauve

+0

пример: http://jsfiddle.net/collinsauve/5GQ6s/ заменить myurl во второй последней строке с помощью междоменного вызова ... responseText будет неопределенным – csauve

+0

видя это поведение с той же скрипкой во всех браузерах Chrome, FF и IE – csauve

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