我在很多地方都读到,在$ .getJSON中向网址添加&callback=?
将允许跨域JSON抓取。 (例如:http://www.ibm.com/developerworks/library/wa-aj-jsonp1/)
但这对我不起作用。
这是我的表格:
<form id="commentForm_pub4101" class="commentForm" action="/SubmitComment" method="POST">
<h3>Your comment:</h3>
<div class="commentFormTopData commentFormRow">
<label for="Commenter">your name</label>
<input class="commentFormCommenter" id="Commenter" name="Commenter" type="text" value="" />
<label for="Email">e-mail</label>
<input class="commentFormEmail" id="Email" name="Email" type="text" value="" />
</div>
<div class="commentFormBody commentFormRow">
<label for="Body">comment</label>
<textarea class="commentFormBody" cols="20" id="Body" name="Body" rows="2"></textarea>
</div>
</form>
这是我的jQuery:
$('form[action$="SubmitComment"]').submit(function (event) {
event.preventDefault();
$.getJSON('http://localhost/Comments/index.asp?Title=TESTTitle&Commenter=TESTCommenter&Email=TESTemail&Body=TESTBody&PublicationId=TESTPublicationId&callback=?',
function (data2) {
alert(data2.Title);
}
);
});
目标URL是经典ASP脚本(不要问为什么 - 它很复杂),使用JSON_2.0.4.asp库返回JSON结果。我不认为这与问题有关,因为这是直接浏览器调用URL的返回结果:
{"Commenter":"TESTCommenter","Email":"TESTemail","Body":"TESTBody","PublicationId":"TESTPublicationId","Title":"TESTTitle"}
但如果你坚持,这是代码(此时是测试):
<!--#include file="JSON_2.0.4.asp"-->
<%
Dim body: body = Request("")
Dim jsa: Set jsa = jsObject()
jsa("Commenter") = Request("Commenter")
jsa("Email") = Request("Email")
jsa("Body") = Request("Body")
jsa("PublicationId") = Request("PublicationId")
jsa("Title") = Request("Title")
jsa.Flush
%>
...所以,当我把所有这些测试代码放在一起......没有爱。没有包含“TESTTitle”的警报窗口。
我做错了什么?
答案 0 :(得分:3)
要做交叉演示JSON,它使用JSONP格式。
当JSON响应如下所示:
{"name":"value"}
相应的JSONP响应如下所示:
callBackName({"name":"value"})
callBackName
是您在查询字符串中发送的回调。
因此,您的ASP代码必须选取该参数,并将JSON包装在函数调用中。
答案 1 :(得分:1)
JSONP需要一个回调包装器。见http://en.wikipedia.org/wiki/JSONP
e.g。 example.com?foo.php?callback=bar
返回
bar({json});
答案 2 :(得分:1)
callback=?
将替换为callback=jQuery1238123883
之类的内容。您的ASP页面负责获取该回调值。然后将返回JSON包装在具有该回调名称的函数中,当且仅当设置了回调时。
答案 3 :(得分:1)
我看到jQuery在发现这应该是JSONP调用之前逃避?
引起的类似问题。
解决方案是使用备用参数集:
$.getJSON('http://localhost/Comments/index.asp?json.wrf=?', {
Title: 'TESTTitle',
Commenter: 'TESTCommenter',
Email: 'TESTemail',
Body: 'TESTBody',
PublicationId: 'TESTPublicationId'
});
答案 4 :(得分:0)
试试这个:
$.getJSON('http://localhost/Comments/index.asp?Title=TESTTitle&Commenter=TESTCommenter&Email=TESTemail&Body=TESTBody&PublicationId=TESTPublicationId&callback=?',null,
function (data2) {
alert(data2.Title);
}
);