2009-08-10 90 views
1

我有一个getJSON调用,这是莫名其妙地失败。这个想法是,你点击提交评论,URL被击中,这决定了评论是好还是坏话。响应以JSON形式给出。getJSON失败,JSON验证

下面是生成呼叫的成对的JS。注释和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 BLOCK发送/ READS回应:

$('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。

+0

请保持你的URIs幂等。即使是阿贾克斯人。这应该使用'$ .post'。当你不这样做时,它实际上违反了HTTP规范http://www.w3.org/2001/tag/doc/whenToUseGet.html#safe – 2009-08-10 21:42:21

回答

3

的查询字符串参数“callback=?”进场时,如果你使用的是跨站点脚本或JSONP,如果您发布相同的服务器,你并不需要使用。

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

实施例:

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

因此,无论使服务器侧改变如果必要或简单remove从URL中的 “callback=?” 参数。

这里的more info on jsonp

+0

这可能已经完成了...只是做了一个快速测试,并得到回报。商店正在关闭,所以我明天会更加努力,并在我解答​​之前尝试验证。 – KRH 2009-08-10 22:14:18

+0

是的,这样做,虽然有其他调用使用回调,并没有失败......不知道为什么这一个。 Django正在产生响应。无论哪种方式,该脚本不需要跨域,所以我将其标记为已回答。谢谢! – KRH 2009-08-11 14:53:33

1

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

这里是一个工作JSON调用我在.NET中使用与jQuery 1.3.2

$.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"} 
    } 
}); 
0

你有没有用$就尝试过的例子吗?然后,您可以定义错误和成功回调,并有更好的主意。

0

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

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

试过这个,不幸的是没有抛出任何错误。 – KRH 2009-08-10 22:12:18

+0

这些x域名网址? – redsquare 2009-08-10 22:18:11