【问题标题】:Cross-domain Jquery AJax jsonp跨域Jquery AJax jsonp
【发布时间】:2013-04-04 15:14:48
【问题描述】:

我正在构建应用程序和服务器(不幸的是在不同的域上)

在我拥有的应用程序上:

$.ajax({
  url: BASE_URL + "api/create",
  type: "get",
  async: false, // why do I need this
  dataType: "jsonp",
  data: {
    "auth_token": "cBQHASwKszsW4e75unK6"
  }, 
  error: function(error) {
    alert(JSON.stringify(error));
  },
  success: function(data) {
    alert(data);
  }
});

我知道服务器正在返回(当我在浏览器中访问它时):

jQuery1910041686943266540766_1365730282085({"error":"User does not exist","status":400})

(这是正确的数据)

但是,ajax 请求失败并被列为“失败”状态并键入“待处理”

我不确定这里发生了什么


我也试过了:

 $.getJSON(BASE_URL + "api/create?auth_token=cBQHASwKszsW4e75unK6&callback=?", function(data) {
   alert(JSON.stringify(data));
 });

也失败了

【问题讨论】:

  • 你得到jQuery1910041686... 却没有指定回调函数变量?您在Firebug 中的Net 选项卡中获得了什么地址?
  • async 据我所知,对于 jsonp 不能为假。不是说它与您的问题有关,而是跨域 jsonp 请求添加了一个脚本标签,并且是异步的。
  • localhost:3000/api/create?callback=jQuery19101939692951273173_1365751304024&auth_token=cBQHASwKszsW4e75unK -回答第一个问题,回调参数显然是由jquery添加的
  • 我将 async 设置为 true ,但它仍然失败。还增加了 10 秒的等待,但仍然失败
  • 对不起,我的意思是我试过了

标签: jquery cross-domain


【解决方案1】:

为此,您需要创建一个代理页面。 例如:proxy.php

调用请求直接通过ajax调用proxy.php

让我们知道它对你有用。

步骤: 1.新建页面proxy.php 2. 使用 CURL 或 File_get_contents 从外部 URL 获取数据。 3.通过ajax调用proxy.php代替跨域URL。

【讨论】:

  • 不明白名为 proxy.php 的页面有什么帮助
  • @deep2mail — 它使用 JSON-P。应该不需要代理。
  • 你使用什么数据不能直接调用跨域URL
  • 是的,你可以 - JSONP 正是使用跨域的东西,它非常聪明,使用几乎任何浏览器都会遵循的方法。在这里阅读:en.wikipedia.org/wiki/JSONP
猜你喜欢
  • 1970-01-01
  • 2014-03-09
  • 2012-05-18
  • 2013-07-28
  • 2012-07-29
  • 1970-01-01
  • 2013-01-04
  • 2013-10-23
相关资源
最近更新 更多