我有一个 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 block :
$('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 函数来 try catch 错误,但它们都是无声的。我可以看到请求在 Firebug 中发出,并作为状态 200 响应返回,这些响应在 JSONLint 中验证并且我可以在响应的 JSON 选项卡中很好地遍历它。如果我在 getJSON 之前发出警报,它就会运行;只是它里面没有任何东西在运行。我还发现,如果我将 .getJSON 更改为 .get,警报会运行,这表明它与 JSON 有关。我不知道问题出在哪里。使用 Firefox 3.0.13。
最佳答案
查询字符串参数“callback=?
”在您使用跨站点脚本或 jsonp 时发挥作用,如果您发布同一服务器,则不需要使用它。
如果您需要或想要使用该选项,服务器端代码需要返回包含在 json 响应中的回调函数。
示例:
$jsonData = getDataAsJson($_GET['symbol']);
echo $_GET['callback'] . '(' . $jsonData . ');';
// prints: jsonp1232617941775({"symbol" : "IBM", "price" : "91.42"});
因此,要么在必要时更改服务器端,要么简单地从 url 中删除“callback=?
”参数。
关于javascript - getJSON 失败,JSON 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1257278/