2010-11-24 76 views
3

我有输出HTML的一个简单的线路的形式的域检索的HTML <a href="link">A LINK</a>横跨使用jQuery和JSONP

我可以因为这是跨越打算附加到URL等http://site.com/form.asp?sample=100

数据直接访问过程域(到一个子域)我试图用JSONP来做到这一点。我第一次尝试了数据类型JSON,但我仍然得到了403禁止。这里是我用JSONP尝试的东西,但是这是各种各样的错误,并返回一个错误,这个%5Bobject%20Object%5D“附加到它,我想这是一个问题,我试图将数据追加到网址是什么?

$j.getJSON({ 
     type: 'POST', 
     url: 'http://site.com/form.asp', 
     data: 'order=' + ordervalue, 
     contentType: "application/json; charset=utf-8", 
     dataType: "jsonp", 
     success: function(response) { 
      alert(response); 
     } 
    }); 

回答

7

JSONP不喜欢这个工作,你不发送JSON的一切,你要发送HTML。

JSONP是严格意义上的GET请求(通过创建一个<script>标签制造) ,你不能跨域得到结果......它只是不会这样工作。JSONP的工作方式是它基本上添加到您的页面:

<script type="text/javascript" src="http://site.com/form.asp?order=something&callback=myFunc"></script> 

....这种反应必须是有效的JavaScript,通常它看起来像:

myFunc({ "key": "value"...data, etc... }); 

它不用于提取HTML工作,它只是抛出一个语法错误,这个限制是非常有意和部分安全块已到位(same origin policy的一部分)。

+0

感谢您的解释尼克。我确实将类型设置为'GET',但遇到同样的问题,所以我想尝试发布。您是否有关于如何获取通过跨域属性的url打印的html的建议?我正在使用json,但得到了403,我不知道我是否与jsonp非常接近。 – Zac 2010-11-24 09:17:19

1

您仍然可以交/在客户端上跨域:

flyJSONP/YQL
jankyPOST/postMessage的/ contentWindow
CORS