getJSON失败,JSON验证

时间:2009-08-10 21:20:46

标签: javascript jquery ajax

我有一个令人费解的失败的getJSON调用。这个想法是,你点击提交评论,一个URL被点击,确定评论是否正常或其中有顽皮的话。响应以JSON格式给出。

这是生成呼叫的配对向下JS。注释和URL已经在页面上,它抓住它们并点击URL:

表格HTML:

<fieldset id="mg_comment_fieldset" class="inlineLabels">
<div class="ctrlHolder">
    <textarea id="id_comment" rows="10" cols="40" name="comment"></textarea>
</div>
<div class="form_block">
    <input type="hidden" name="next" value="" />
    <input id="mg_comment_url" type="hidden" name="comment_url" value="" />

    <input id="mg_comment_submit" type="submit" value="Remark" />
</div>
</fieldset>

发送/阅读回应的特定JS块:

$('input#mg_comment_submit').click(function(){
var comment = $("textarea#id_comment").val();
var comment_url = $('input#mg_comment_url').val();
$.getJSON(
    comment_url+"?callback=?&comment="+comment+"&next=",
    function(data){
        console.log(data);
        alert(data);
    });         
});

JSON回复:

[{"errors": {"comment": ["Weve detected that your submission contains words which violate our Terms and Conditions. Please remove them and resubmit test"]}}]

它作为application / json的mimetype返回。它在JSONLint中验证。我还尝试添加一些AJAX函数来尝试捕获错误,并且它们都是静默的。我可以在Firebug中看到请求,并返回状态200响应,它在JSONLint中验证,我可以在响应的JSON选项卡中正常遍历。如果我在getJSON之前发出警报,它会运行;只是它内部没有任何东西可以运行。我还发现,如果我将.getJSON更改为.get,警报会运行,表明它是JSON的东西。我不知道问题可能是什么。使用Firefox 3.0.13。

4 个答案:

答案 0 :(得分:3)

如果您使用的是跨站点脚本或jsonp,则查询字符串参数“callback=?”会起作用,如果您要发布相同的服务器,则不需要使用它。

如果您需要或想要使用该选项,服务器端代码需要返回json响应中包含的回调函数。

示例:

$jsonData = getDataAsJson($_GET['symbol']);
echo $_GET['callback'] . '(' . $jsonData . ');';
// prints: jsonp1232617941775({"symbol" : "IBM", "price" : "91.42"});

因此,如果需要,可以更改服务器端,也可以从网址中删除“callback=?”参数。

这是more info on jsonp

答案 1 :(得分:1)

您是否可以手动调用您的服务而不会出现任何错误?您是否尝试过使用firebug并在XBR下查看JSON有效负载的发布/响应?我通常使用.NET作为我的端点,而使用.NET 3.5我需要使用内容类型“application / json; charset = utf-8”。

以下是我在.NET中使用jQuery 1.3.2

的工作JSON调用的示例
$.ajax({   
    type: "POST",   
    url: "WebService1.ASMX/HelloWorld",   
    contentType: "application/json; charset=utf-8",   
    dataType: "json",   
    data: "{}",   
    success: function(res) {   
    // Do your work here.   
    // Remember, the results for a ASMX Web Service are wrapped   
    // within the object "d" by default. e.g. {"d" : "Hello World"}   
    }   
});

答案 2 :(得分:0)

你用$ .ajax试过吗?然后,您可以定义错误和成功回调,并有更好的想法。

答案 3 :(得分:0)

您可以尝试添加全局ajaxError函数来记录错误。

$.ajaxError( function(event, XMLHttpRequest, ajaxOptions, thrownError){
   console.log( thrownError );
 });