【问题标题】:JQuery Cross Domain GET Request Not WorkingJQuery跨域GET请求不起作用
【发布时间】:2014-02-09 23:01:28
【问题描述】:

我正在尝试设置一个简单的接口来测试 Basecamp API。我已设置我的 dataType = jsonp 以避免跨域问题。拨打电话时,我可以在检查器中看到响应正在发送回格式正确的 JSON。但是,我的错误警报显示 4 和 200,但响应文本为“未定义”。我假设我没有正确地从 jsonp 转换为 json,但我需要得到我想要的响应吗?还是我没有正确访问响应。

代码:

function findAllProjects() {
    console.log('findAllProjects');
    $.ajax({
        type: 'GET',
        url: rootURL + "projects.json",
        username: "username",
        password: "password",
        crossDomain: true,
        //contentType: "application/json",
        dataType: "jsonp", // data type of response

        success: function(data) {
            alert(data[0].id);
            console.log("Success function!");
            console.log(data);
        },

        error: function(xhr, err) {
            //alert("Error!");
            alert("readyState: "+ xhr.readyState+"\nstatus: "+ xhr.status);
            alert("responseText: "+ xhr.responseText);
        },
    });
}

【问题讨论】:

标签: javascript jquery json jsonp


【解决方案1】:

您的 URL 用于 .json 文件,但 JSONP 需要一个经过特殊格式化的 JavaScript 文件,以将结果传递给您控制的函数(或者,由于您正在使用它,因此由 jQuery 管理)。无论哪种方式,服务器都需要支持 JSONP,不能只请求一个 JSON 文件,然后将其强制转换为 JSONP 交互。

【讨论】:

  • API 只返回 json。我将它设置为 jsonp 因为这是我可以让它执行的唯一方法。我正在返回一个带有数据的 json 响应。
  • @porterhaus 则无法仅使用客户端代码请求所述数据,除非您修改服务器端响应以支持 CORS 或 JSONP。目前它似乎都不支持。
  • 谢谢。在研究了其他一些论坛后,我得出了同样的结论。他们最终计划支持它。
【解决方案2】:

服务器端,需要用函数调用包装 jason 数据。函数的名称作为“?callback=?”在 url 中传递。

因此,您不仅需要从服务器返回 json 对象 {...},还需要返回

SomeFunctionName({...});

【讨论】:

  • 这是服务器端响应的功能还是我可以根据自己的请求请求它?
  • jQuery 使用 url 中的回调参数在请求中传递函数的名称。 SomeFunctionName 应该是回调参数中的内容,并且是服务器端响应的一部分。
猜你喜欢
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 2014-04-18
  • 1970-01-01
  • 2015-01-17
  • 2012-04-27
相关资源
最近更新 更多