使用 jQuery 和/或 Javascript 报告 JSON 对象中的语法错误

发布于 2024-07-25 03:43:01 字数 799 浏览 4 评论 0原文

当我使用 jQuery 加载 JSON 提要时,报告语法错误的最佳方法是什么? 我可以像这样建立错误报告设置:

error: function(xhr){
    alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText);
}

但是,当我调用的 URL 加载有效页面(尽管其中没有包含 JSON 对象的页面)时,该函数不会触发。 此外,我无法检查它返回的数据,因为(至少根据 Firebug) jQuery.getJSON 在将对象传递给执行它的函数之前在语法错误处中断。

我想要报告错误的原因是因为这是我检查用户是否提供了可生成有效 JSON 提要的 URL 的方法。

这是相关答案,需要控制服务器的响应内容。 这是 Firebug 给我的语法错误 语法错误 Firebug 给我 http://img.skitch.com/20090623-8c97g47jha4mn6adqqtjd41cwy.jpg< /a>

有什么想法吗? 谢谢

What the best way to report a syntax error when I'm loading a JSON feed with jQuery? I can establish the error reporting settings like this:

error: function(xhr){
    alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText);
}

however this function doesn't fire when the URL I've called loads a valid page (albeit not one with a JSON object in it). Futhermore, I can't check the data that it does return because (according to Firebug at least) jQuery.getJSON breaks at the syntax error before it passes the object to the function that executes it.

The reason I'd like to report errors is because this is my way of checking whether the user has supplied a URL that will produce a valid JSON feed.

Here's a related answer that requires control over what the server will respond with.
Here's the syntax error that Firebug gives me
The syntax error Firebug gives me http://img.skitch.com/20090623-8c97g47jha4mn6adqqtjd41cwy.jpg

Any ideas? Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

心作怪 2024-08-01 03:43:01

您可以将函数绑定到全局 ajaxerror 事件

$(document).ajaxError(function(event, request, ajaxOptions, thrownError){
  if ( 4==request.readyState) { // failed after data has received
    alert(ajaxOptions['url'] + " did not return valid json data");
  }
  else {
    alert("something else wnet wrong");
  }
});

or use $.ajax() instead of $.getJSON()

function foo() {
  // $.getJSON("http://localhost/test.txt", function(data){});
  $.ajax({
    type: "GET",
    url: "http://localhost/test.txt",
    success: function (data, textStatus) {
      alert("succuess");
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
      alert("request failed: " + textStatus);
    },
    dataType: "json"
  });
}

编辑:但您可能需要记住 ajax(dataType:"json")getJSON() (它只是调用 .ajax(dataType:"json") 归结为 data = window["eval"]("(" + data + ")") ...这可能不是如果您不知道脚本请求什么(任意)数据,那么这可以解释为什么当您向 Firebug 提供 html 文档而不是 json 数据时,它会捕获语法错误。
在这种情况下,最好请求 dataType:"string" 并通过完全成熟的 json 解析器库运行数据。

You can bind a function to global ajaxerror events

$(document).ajaxError(function(event, request, ajaxOptions, thrownError){
  if ( 4==request.readyState) { // failed after data has received
    alert(ajaxOptions['url'] + " did not return valid json data");
  }
  else {
    alert("something else wnet wrong");
  }
});

or use $.ajax() instead of $.getJSON()

function foo() {
  // $.getJSON("http://localhost/test.txt", function(data){});
  $.ajax({
    type: "GET",
    url: "http://localhost/test.txt",
    success: function (data, textStatus) {
      alert("succuess");
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
      alert("request failed: " + textStatus);
    },
    dataType: "json"
  });
}

edit: But you might want to keep in mind that both ajax(dataType:"json") and getJSON() (which simply invokes .ajax(dataType:"json") boil down to data = window["eval"]("(" + data + ")") ...this might not be what you want if you don't know what (arbitrary) data your script requests. And this could explain why firebug is catching a syntax error when you feed it an html document instead of json data.
In that case better request dataType:"string" und run the data through a fully fledged json parser lib.

自此以后,行同陌路 2024-08-01 03:43:01

感谢所有回答的人。 因为我从外部域调用 JSON 提要,所以我无法仅使用 jQuery 的 AJAX 功能并将提要拉取为“文本”而不​​是“json”。 jQuery 只允许您从远程源提取“json”和“脚本”。

我最终所做的是编写一个 PHP 脚本来进行位于我自己的服务器上的外部调用。 我使用 jQuery AJAX 来调用它,在 URL 中传递请求的源,然后将其作为“文本”获取。 然后,我运行自己的检查以确保它的 JSON 格式正确,然后使用另一个库对其进行解析。 jQuery 目前不具备解析 JSON 的能力; $.getJSON 仅当您向其传递 URL 时才有效。

Thanks to all who answered. Because I was calling a JSON feed from an external domain, I wasn't able to just use jQuery's AJAX functionality and pull the feed as "text" instead of "json". jQuery only allows you to pull "json" and "script" from a remote source.

What I ended up doing instead was writing a PHP script to make the external call that lived on my own server. I use jQuery AJAX to call this, pass the requested source in the URL, and then grab that as "text." I then run my own check to ensure that it's properly formatted JSON, and then parse it with another library. jQuery doesn't have the ability to parse JSON at the moment; $.getJSON only works if you pass a URL to it.

最舍不得你 2024-08-01 03:43:01

直接在浏览器地址栏中调用 URL 或 XHR 请求,查看源代码并将结果粘贴到能够理解 JavaScript 的 IDE 中。 您可能会发现错误的引用或其他内容。

至少您将能够删除其中的大部分内容,直到找到有问题的语法(如果没有其他情况的话)。

Call the URL or the XHR request directly in your browser's address bar, do a view-source and paste the result into and IDE that understands JavaScript. You'll probably spot a misplaced quote or something.

At least you'll be able to remove chunks of it until you find the offending syntax if nothing else.

秋风の叶未落 2024-08-01 03:43:01

添加到 Diodeus 的答案中,将您可能有问题的 JSON 粘贴到此工具中: http://jsonformatter.curiousconcept.com/< /a>

如果你有萤火虫,你甚至可以组合出一种以编程方式使用网站服务的方法,尽管这可能会让人不悦。

Adding to Diodeus' answer, paste your potentially offending JSON into here this tool: http://jsonformatter.curiousconcept.com/

If you have firebug, you might even be able to hack together a way to use the site a service programmatically, though that may be frowned upon.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文