Javascript 使用JSONP获取XML
两天来,我访问了很多论坛网站,但我没有找到解决问题的确切方法。 我有跨站点脚本问题。使用javascript、html和css编写的应用程序的Web服务会出现如下错误: “XMLHttpRequest无法加载…bla bla bla..访问控制允许原点响应头不允许原点。”我编写的代码是Javascript 使用JSONP获取XML,javascript,xml,xmlhttprequest,cross-domain,jsonp,Javascript,Xml,Xmlhttprequest,Cross Domain,Jsonp,两天来,我访问了很多论坛网站,但我没有找到解决问题的确切方法。 我有跨站点脚本问题。使用javascript、html和css编写的应用程序的Web服务会出现如下错误: “XMLHttpRequest无法加载…bla bla bla..访问控制允许原点响应头不允许原点。”我编写的代码是 $.ajax({ async: false, type: "GET", url: "http://www.yem...om/Cata.../M...ogin2?username=blabla&passw
$.ajax({
async: false,
type: "GET",
url: "http://www.yem...om/Cata.../M...ogin2?username=blabla&password=blabla123",
dataType: "xml",
success: function(xml) {
alert("CONTROL???");
$(xml).find('Login').each(function(){
var logResult = $(this).find('Result').text();
alert(logResult);
});
}
})
;
我知道我必须使用JSONP。但是,当我编写数据类型:“*jsonpxml*”
或数据类型:“*jsonptext xml*”
时,我会收到一条错误消息,比如“SyntaxError:Parse error”
另外,我尝试了CORS Filter,但它需要web.xml,但我没有。当我创建并尝试使用它时,我失败了
此外,我还使用James Padolsey的jQuery尝试了跨域请求
它可以工作,但我还没有解析我收到的数据。这个插件使用Yahoo查询语言,因此,控制数据是不同的,不容易
还有什么办法可以解决我的问题吗?请帮帮我
最好的祝愿。跨域限制的存在是有原因的。它保护互联网用户。它可以防止程序员和黑客做很多有害的事情 你可以做一些事情来绕开它。其中之一是,您可以执行CORS筛选以允许来自跨域的请求。您说您没有web.xml文件。我不确定您的项目是什么样子的,但是如果您使用的是web服务,那么应该在某个地方有某种web.xml文件。如果你不能设置它,那你就倒霉了(除了使用像YQL或类似的好代理之外)。像YQL一样,他们已经设置了CORS过滤器,以允许来自所有域的请求。调用YQL是一个ajax调用,就像您尝试执行的ajax调用一样。最大的区别在于YQL服务器具有CORS过滤器设置,浏览器检测到该设置并允许跨域请求继续 一旦CORS过滤器就位,浏览器将允许您从其他域访问该域。您需要设置项目以允许跨源请求,而不是寻找一种方法来破解它
如果你不控制你正在尝试ping的web服务,那么你就不走运了。只有web服务的所有者才能访问web.xml 跨域限制的存在是有原因的。它保护互联网用户。它可以防止程序员和黑客做很多有害的事情 你可以做一些事情来绕开它。其中之一是,您可以执行CORS筛选以允许来自跨域的请求。您说您没有web.xml文件。我不确定您的项目是什么样子的,但是如果您使用的是web服务,那么应该在某个地方有某种web.xml文件。如果你不能设置它,那你就倒霉了(除了使用像YQL或类似的好代理之外)。像YQL一样,他们已经设置了CORS过滤器,以允许来自所有域的请求。调用YQL是一个ajax调用,就像您尝试执行的ajax调用一样。最大的区别在于YQL服务器具有CORS过滤器设置,浏览器检测到该设置并允许跨域请求继续 一旦CORS过滤器就位,浏览器将允许您从其他域访问该域。您需要设置项目以允许跨源请求,而不是寻找一种方法来破解它
如果你不控制你正在尝试ping的web服务,那么你就不走运了。只有web服务的所有者才能访问web.xml 要在JSONP中获得结果,请将其附加到URL的末尾:&callback= 试试这个:
$.getJSON('http://www.yem...om/Cata.../M...ogin2?username=blabla&password=blabla123&callback=?', function(xml) {
alert("CONTROL???");
$(xml).find('Login').each(function(){
var logResult = $(this).find('Result').text();
alert(logResult);
});
});
服务器端也必须启用跨域脚本。若要在JSONP中获得结果,请将其附加到URL的末尾:&callback= 试试这个:
$.getJSON('http://www.yem...om/Cata.../M...ogin2?username=blabla&password=blabla123&callback=?', function(xml) {
alert("CONTROL???");
$(xml).find('Login').each(function(){
var logResult = $(this).find('Result').text();
alert(logResult);
});
});
跨域脚本也必须在服务器端启用。我也遇到了类似的问题。我发现这个问题的解决方案修复了我的XSS问题: 您不必使用JSONP,因为CORS使用XML响应。您是否尝试将support.cors属性设置为true(上述问题的解决方案)
$.support.cors=true代码>
我也遇到了类似的问题。我发现这个问题的解决方案修复了我的XSS问题:
您不必使用JSONP,因为CORS使用XML响应。您是否尝试将support.cors属性设置为true(上述问题的解决方案)
$.support.cors=true代码>
您可以在/*comment*/
中的Javascript函数中编写XML,并使用functionname.toString()方法将此函数转换为文本,并使用JSONP的回调函数解析“/*
”和“*/
”之间的文本,该函数在所有旧浏览器中都可以使用。示例xml\u通过_jsonp.js:
function myfunc()
{/*
<xml>
<div class="container">
<div class="panel panel-info col-lg-10 col-lg-offset-1 added-panel">
<div class="panel-heading">Random1 - Random2</div>
<div class="panel-body">
<div>Random3</div>
</div>
</div>
</div>
</xml>
*/}
function callback(func)
{
var myhtml = func.toString();
var htmlstart = myhtml.indexOf('/*');
var htmlend = myhtml.lastIndexOf('*/');
return myhtml.substr(htmlstart+2, htmlend-htmlstart-2);
}
函数myfunc()
{/*
随机1-随机2
随机数3
*/}
函数回调(func)
{
var myhtml=func.toString();
var htmlstart=myhtml.indexOf('/*');
var htmlend=myhtml.lastIndexOf('*/');
返回myhtml.substr(htmlstart+2,htmlend-htmlstart-2);
}
您可以在/*comment*/
中的Javascript函数中编写XML,并使用functionname.toString()方法将此函数转换为文本,并使用JSONP的回调函数解析“/*
”和“*/
”之间的文本,该函数在所有旧浏览器中都能工作。示例xml\u通过_jsonp.js:
function myfunc()
{/*
<xml>
<div class="container">
<div class="panel panel-info col-lg-10 col-lg-offset-1 added-panel">
<div class="panel-heading">Random1 - Random2</div>
<div class="panel-body">
<div>Random3</div>
</div>
</div>
</div>
</xml>
*/}
function callback(func)
{
var myhtml = func.toString();
var htmlstart = myhtml.indexOf('/*');
var htmlend = myhtml.lastIndexOf('*/');
return myhtml.substr(htmlstart+2, htmlend-htmlstart-2);
}
函数myfunc()
{/*
随机1-随机2
随机数3
*/}
函数回调(func)
{
var myhtml=func.toString();
var htmlstart=myhtml.indexOf('/*');
var htmlend=myhtml.lastIndexOf('*/'