$ .getJSON只是不适合我

时间:2011-09-15 13:46:14

标签: jquery getjson

我在很多地方都读到,在$ .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”的警报窗口。

我做错了什么?

5 个答案:

答案 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);
        }
    );