Ajax 返回XML时的JSONP数据类型

Ajax 返回XML时的JSONP数据类型,ajax,jsonp,Ajax,Jsonp,我在玩弄JSONP。我理解(也许)这个概念,但在实现上有点落后 我拥有的是一个web服务器,它通过URL字符串生成XML结果。正如我所研究的,JSONP应该解决跨域问题,但预期的返回数据仍然是JSON数组。因此,如果服务器返回XML,如何让ajax脚本识别并能够解析它 这是我的密码: var usdaurl = 'http://eligibility.sc.egov.usda.gov/eligibility/eligibilityservice?eligibilityType=Property&

我在玩弄JSONP。我理解(也许)这个概念,但在实现上有点落后

我拥有的是一个web服务器,它通过URL字符串生成XML结果。正如我所研究的,JSONP应该解决跨域问题,但预期的返回数据仍然是JSON数组。因此,如果服务器返回XML,如何让ajax脚本识别并能够解析它

这是我的密码:

var usdaurl = 'http://eligibility.sc.egov.usda.gov/eligibility/eligibilityservice?eligibilityType=Property&requestString=<?xml version="1.0"?><Eligibility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="/var/lib/tomcat5/webapps/eligibility/Eligibilitywsdl.xsd"><PropertyRequest StreetAddress1="'+street+'" StreetAddress2="" StreetAddress3="" City="'+city+'" State="'+state+'" County="" Zip="'+zip+'" Program="RBS"></PropertyRequest></Eligibility>';
var clbk = function(xml){
          var usda = $('Property').attr('Eligibility');
       };

$.ajax({
    url: usdaurl,
    dataType: 'jsonp',
    jsonpCallback: 'clbk'
});
var usdaurl='1http://eligibility.sc.egov.usda.gov/eligibility/eligibilityservice?eligibilityType=Property&requestString=';
var clbk=函数(xml){
var usda=$(‘财产’).attr(‘资格’);
};
$.ajax({
网址:usdaurl,
数据类型:“jsonp”,
jsonpCallback:'clbk'
});
此外,我得到的错误是XML响应中无法识别的字符

Uncaught SyntaxError: Unexpected token < 
未捕获的语法错误:意外标记<

jsonp
必须由您请求的服务支持,否则将完全无用。有这样一种误解,即如果您想发出跨源请求,只需使用jsonp
jsonp(同样)是一种提供程序允许用户在不受SOP限制的情况下获取其内容的方法,任何人都不能只通过传递同源策略。

您可以设置一个代理来字符串化xml/html/soap/任何内容,并将其包装在回调中

下面是一个使用cgi外壳脚本的示例(我总是让它gzip输出,因为99.9%支持javascript的浏览器也支持gzip)

下面是一个示例用法,假设您的服务器位于localhost,脚本位于/cgi-bin/xml2jsonpgz.cgi(busybox的httpd的典型位置)中,它在回调中使用返回的字符串将整个uri插入到
标记中,但您可以使用它在DOM中执行您想要的操作

<html><head><title>test</title></head><body><div id="notaniframe"></div>
<script>
    function dummy(data){alert(data);document.getElementById("notaniframe").innerHTML=data}
    Loaded=0
    setTimeout(function(){if(!Loaded)alert("load failed")},30000);
</script>
<script onload='Loaded=1;alert("loaded")' src="http://localhost/cgi-bin/xml2jsonpgz.cgi?callback=dummy&http://stackoverflow.com"></script>
</body></html>
测试
函数dummy(data){alert(data);document.getElementById(“notaniframe”).innerHTML=data}
已加载=0
setTimeout(函数(){if(!load)alert(“load failed”)},30000);
基本用法是:设置src=urlOfCgiScript+“?callback=“+callBackName+”&“+url 并设置回调来处理字符串

您可以对json数据执行相同的操作,但转义不那么复杂

<html><head><title>test</title></head><body><div id="notaniframe"></div>
<script>
    function dummy(data){alert(data);document.getElementById("notaniframe").innerHTML=data}
    Loaded=0
    setTimeout(function(){if(!Loaded)alert("load failed")},30000);
</script>
<script onload='Loaded=1;alert("loaded")' src="http://localhost/cgi-bin/xml2jsonpgz.cgi?callback=dummy&http://stackoverflow.com"></script>
</body></html>