我有一个令人费解的失败的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。
答案 0 :(得分:3)
如果您使用的是跨站点脚本或jsonp,则查询字符串参数“callback=?
”会起作用,如果您要发布相同的服务器,则不需要使用它。
如果您需要或想要使用该选项,服务器端代码需要返回json响应中包含的回调函数。
示例:强>
$jsonData = getDataAsJson($_GET['symbol']);
echo $_GET['callback'] . '(' . $jsonData . ');';
// prints: jsonp1232617941775({"symbol" : "IBM", "price" : "91.42"});
因此,如果需要,可以更改服务器端,也可以从网址中删除“callback=?
”参数。
答案 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 );
});