Итак, я настраиваю отдельную тестовую страницу, которая использует jquery и yql для выполнения междоменных запросов.Таким образом, моя справочная служба может открыть страницу, и она будет загружать несколько страниц из разных доменов.проблема в том, что json, который я получаю, содержит: "", который НЕ является содержимым страницы, которую я хочу ... Есть мысли о том, как решить эту проблему?
Моя ссылка в этом случае: http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/
Я могу заставить его пример работать без проблем ... только перенаправление в моем собственном случае.Да. Я использую google.load ('jquery', 1) и jqueryui, чтобы сохранить эту страницу в одиночестве.
Мысли?
Кстати, это для проверки моего приложения ипортал в 2 шт.Не говорите мне, чтобы разместить страницу.если мой сервер не работает, страница не будет там .. да, я знаю, что справочная служба ДОЛЖНА быть в состоянии справиться с этим ... но я все еще получаю тексты для нашего средства управления веб-контентом, а не мое приложение, потому что они, очевидно, не могут понять этоиз ... Я делаю эту пустышку для самостоятельной проверки.
КОД ДЛЯ СТРАНИЦЫ
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Test</title>
<script
src="https://www.google.com/jsapi?key=HIDDEN"
type="text/javascript"></script>
<script>
google.load("jquery", "1");
google.load("jqueryui", "1");
function checkJquery() {
if (window.jQuery && jQuery.ui) {
jqueryLoaded();
} else {
window.setTimeout(checkJquery, 100);
}
}
function jqueryLoaded() {
$(document).ready(function(){
var container = $('#target');
container.attr('tabIndex','-1');
$('.ajaxtrigger').click(function(){
var trigger = $(this);
var url = trigger.attr('href');
if(!trigger.hasClass('loaded')){
trigger.append('<span></span>');
trigger.addClass('loaded');
var msg = trigger.find('span::last');
} else {
var msg = trigger.find('span::last');
}
doAjax(url,msg,container);
return false;
});
function doAjax(url,msg,container){
// if the URL starts with http
if(url.match('^http')){
// assemble the YQL call
msg.removeClass('error');
msg.html(' (loading...)');
$.getJSON("http://query.yahooapis.com/v1/public/yql?"+
"q=select%20*%20from%20html%20where%20url%3D%22"+
encodeURIComponent(url)+
"%22&format=xml'&callback=?",
function(data){
if(data.results[0]){
var data = filterData(data.results[0]);
msg.html(' (ready.)');
container.
html(data).
focus().
effect("highlight",{},1000);
} else {
msg.html(' (error!)');
msg.addClass('error');
var errormsg = '<p>Error: could not load the page.</p>';
container.
html(errormsg).
focus().
effect('highlight',{color:'#c00'},1000);
}
}
);
} else {
$.ajax({
url: url,
timeout:5000,
success: function(data){
msg.html(' (ready.)');
container.
html(data).
focus().
effect("highlight",{},1000);
},
error: function(req,error){
msg.html(' (error!)');
msg.addClass('error');
if(error === 'error'){error = req.statusText;}
var errormsg = 'There was a communication error: '+error;
container.
html(errormsg).
focus().
effect('highlight',{color:'#c00'},1000);
},
beforeSend: function(data){
msg.removeClass('error');
msg.html(' (loading...)');
}
});
}
}
function filterData(data){
// filter all the nasties out
// no body tags
data = data.replace(/<?\/body[^>]*>/g,'');
// no linebreaks
data = data.replace(/[\r|\n]+/g,'');
// no comments
data = data.replace(/<--[\S\s]*?-->/g,'');
// no noscript blocks
data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g,'');
// no script blocks
data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g,'');
// no self closing scripts
data = data.replace(/<script.*\/>/,'');
// [... add as needed ...]
return data;
}
});
}
checkJquery();
</script>
</head>
<body>
<ul>
<li><a href="http://developer.yaho.com" class="ajaxtrigger">see developer.yahoo.com</a></li>
<li><a href="http://tmiweb.cat.com" class="ajaxtrigger">TMIWeb WCM</a></li>
<li><a href="borked" class="ajaxtrigger">this is a broken link</a></li>
<li><a href="http://borked" class="ajaxtrigger">this is an external broken link</a></li>
<li><a href="waiting-for-godot.php" class="ajaxtrigger">this times out</a></li>
</ul>
<div id="target"><body/></div>
</body>
</html>
Итак, ответ json, который я получаю, выглядит как страница нашего входаredirect
Я хочу заставить пользователя входить в систему с собственного экрана со своими учетными данными, чтобы мне не приходилось передавать cookie-файлы через API Yahoo или что-либо еще, когда Yahoo отправляет запрос на мою страницу.
edit Я также изменил код, чтобы попытаться загрузить фрейм с содержимым тела, думая, что он будет обрабатывать перенаправление ... но я получаю такой же стиль ответа ... и чтоВ итоге я вижу, что Iframe выглядит следующим образом:
<iframe style="width:80%; height:50%;" id="render">
<html>
<head>
</head>
<body style=""></body>
</html>
</iframe>
Принимая во внимание, что пример, который я МОГУ заставить работать по ссылке james.padolsey, фактически заполняет содержимое тела моего iframe ... так что опятьЭлектронная переадресация.