javascript - getJSON 失败,JSON 验证

标签 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 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=?”参数。

这是 more info on jsonp

关于javascript - getJSON 失败,JSON 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1257278/

相关文章:

javascript - 使用 Cheerio 附加节点的 sibling ?

javascript - 动画滚动

javascript - 从 spritesheet 定义kineticjs 矩形背景

javascript - 在 jQuery 中获取 html 页面的 id?

javascript - 如何将缺失的对象添加到数组中?

javascript - 为什么 node.js `fs.existsSync` 在用 promise 包装时不能正常工作?

javascript - NodeJs 基于 CSV 输入创建动态 mySql 表

javascript - ExtJS xtype 菜单在 Chrome 中超时

php - 如何通过从另一个下拉列表中选择值来填充下拉列表?

javascript - 如何使用 AJAX post 方法从 PHP 的特定函数中检索 JSON