【问题标题】:cross domain ajax call with jquery failing parse使用 jquery 解析失败的跨域 ajax 调用
【发布时间】:2011-12-14 03:39:06
【问题描述】:

我正在尝试进行跨域脚本调用以从远程服务器获取一些 JSON 数据,我可以看到正在发出的请求以及使用 Fiddler 成功返回的数据,但调用失败,因为它未能解析 JSON - JSON 是有效的...

下面的jquery ajax调用有什么问题吗?

jquery 版本 = 1.7.1

$.ajax({
        url: 'http://fooed.cloudapp.net/users?callback=?',
            crossDomain: true,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data) {
                alert('success');
            },
            error: function(data) {
                alert('error');
            },
            complete: function(xhr, data) {
                if (xhr.status == 0)
                    alert('fail');
                else
                    alert('success');
            }
        });

示例 JSON:

[{ "ContentPreferences":[],
   "Email":"mark.jones@somedomain.com",
   "FirstName":"Mark",
   "Id":"aa2f1944-e739-4329-9546-a21f52c02448",
   "KnownAs":"Mark",
   "LastName":"Jones",
   "TimeStamp":"\/Date(1323804151906)\/"
}]

【问题讨论】:

  • 如果您直接导航到http://fooed.cloudapp.net/users?callback=foo 会得到什么,您可以将其粘贴到您的问题中吗?我几乎可以打赌json 有效json 但无效jsonp

标签: jquery ajax json cross-domain


【解决方案1】:

您的 json 不是有效的 jsonp。它应该看起来像这样:

foo([{ "ContentPreferences":[],
     "Email":"mark.jones@somedomain.com",
    "FirstName":"Mark",
    "Id":"aa2f1944-e739-4329-9546-a21f52c02448",
    "KnownAs":"Mark",
    "LastName":"Jones",
    "TimeStamp":"\/Date(1323804151906)\/"
 }])

这意味着 api 不支持 jsonp 或需要与 callback=? 不同的参数

【讨论】:

  • 正确。如果无法让它返回 jsonp,则必须使用服务器端代理或 YQL 等在线代理。
  • YQL 是否允许我进行 POST、PUT 和 DELETE 以及 GET 操作?
  • 不,除了使用 AJAX 获取跨域之外,除了 coors 之外,不可能做任何事情? (我不太了解)
猜你喜欢
  • 2012-04-14
  • 2011-03-22
  • 1970-01-01
  • 2013-11-27
  • 2017-03-31
  • 2013-11-26
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
相关资源
最近更新 更多