Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JSONP获取XML_Javascript_Xml_Xmlhttprequest_Cross Domain_Jsonp - Fatal编程技术网

Javascript 使用JSONP获取XML

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

两天来,我访问了很多论坛网站,但我没有找到解决问题的确切方法。 我有跨站点脚本问题。使用javascript、html和css编写的应用程序的Web服务会出现如下错误:

“XMLHttpRequest无法加载…bla bla bla..访问控制允许原点响应头不允许原点。”我编写的代码是

$.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('*/'