如何跨站获取数据?我正在使用 $.post

发布于 2025-01-01 06:47:37 字数 150 浏览 0 评论 0原文

我正在测试本地主机上的 JavaScript 代码。该文件需要来自远程服务器的 JSON 格式的数据。当我直接点击 JSON url 时,我得到了数据,但在 javascript 中,我得到了空响应。

可能是什么原因?我正在使用 jquery post 方法来获取数据。

I'm testing a javascript code which is on localhost. This file requires data from a remote server in JSON format. When I directly hit the JSON url, I get the data, but in javascript, I'm getting empty response.

What might be the reason? I'm using jquery post method to get the data.

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

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

发布评论

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

评论(6

一片旧的回忆 2025-01-08 06:47:37

由于安全原因,您无法使用 JavaScript 访问来自不同域的任何资源。 jQuery 对此无能为力,但有一些方法可以实现此目的,例如 JSONPYQL

查看使用 YQL 进行跨域 AJAX 请求的快速提示。

http: //net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-domain-ajax-request-with-yql-and-jquery/

You cannot access any resource from different domain using JavaScript due to security reasons. jQuery cannot do anything for this but there are some ways to achieve this like JSONP or YQL.

Take a look at this quick tip for cross domain AJAX request with YQL.

http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-domain-ajax-request-with-yql-and-jquery/

森林散布 2025-01-08 06:47:37

$.post 是一个ajax方法,您不能使用ajax方法访问来自不同来源的数据。

有关详细信息,请参阅 jQuery 文档

由于浏览器安全限制,大多数“Ajax”请求都会受到影响
同源政策;请求无法成功检索
来自不同域、子域或协议的数据。

$.post is an ajax method, and you can't use ajax methods to access data from a different origin.

See the jQuery docs for details:

Due to browser security restrictions, most "Ajax" requests are subject
to the same origin policy; the request can not successfully retrieve
data from a different domain, subdomain, or protocol.

巨坚强 2025-01-08 06:47:37

您应该研究一下使用 JavaScript 设置的保护措施。这是同源政策。基本上,这意味着如果您想对来自与您所在页面来源不同的服务器的数据执行 XmlHttpRequest,则不能,除非您跳过了一些困难。

查看 JSON-P 或 jQuery 的方法来克服这个问题。

There's a protective measure set up with JavaScript that you should look into. It's the same origin policy. Basically it means if you want to do an XmlHttpRequest for data from a server that isn't of the same origin that the page you are on, you can't, unless you jump through hoops.

Check out JSON-P, or jQuery's methods for overcoming this.

☆獨立☆ 2025-01-08 06:47:37

您请求的服务器必须支持 JSONPCORS

否则,这是不可能的。

也不可能使用 POST 发出 JSONP 请求,它必须是 GET

The server you are requesting from must either support JSONP or CORS.

Otherwise, it is not possible.

It is also not possible to make a JSONP request using POST, it must be GET

深爱不及久伴 2025-01-08 06:47:37

出于安全考虑,从不同域请求数据受到限制(请参阅CORS ),专门用于防止XSS(跨站脚本)攻击。

您可以尝试几种替代方案:

  • 如果其他域是 JSONP ,则可以选择支持它
  • 这里另一个相关问题

您可以使用YQL 从另一个域请求资源。

除了这些替代方案之外,您始终可以创建服务器代理并让该代理查询域并返回结果。

Requesting data from a different domain is restricted as a security concern (see CORS), specifically to prevent XSS(cross site scripting) attacks.

You can try a couple of alternatives:

  • JSONP is an option if the other domain supports it
  • here's another relevant question

You can use YQL to request resources from another domain.

Apart from these alternatives you can always make a server proxy and have that proxy query the domain and return results.

咽泪装欢 2025-01-08 06:47:37

正如其他人所说,您不能使用 AJAX 访问远程服务器。你必须使用 JSONP。如果您无法控制其他服务器,或者其他服务器不提供 JSONP,则必须使用代理。

用 PHP 编写一个非常容易。 http://www.betavine.net/bvportal/blog/view.html?blogId=101&postId=ff8080811afe49d3011afe4bb5de0003

<?
ob_start();

$url = $_REQUEST['url'];
$curl_handle = curl_init($url);
curl_setopt($curl_handle, CURLOPT_HEADER, 0);
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, "Owen's AJAX Proxy");

$content = curl_exec($curl_handle);
$content_type = curl_getinfo($curl_handle, CURLINFO_CONTENT_TYPE);
curl_close($curl_handle);
header("Content-Type: $content_type");
echo $content;
ob_flush();
?>

As others have said, you cannot use AJAX to access a remote server. You have to use JSONP. If you don't have control of the other server, or if the other server doesn't offer JSONP, you have to use a proxy.

It's really easy to write one in PHP. http://www.betavine.net/bvportal/blog/view.html?blogId=101&postId=ff8080811afe49d3011afe4bb5de0003

<?
ob_start();

$url = $_REQUEST['url'];
$curl_handle = curl_init($url);
curl_setopt($curl_handle, CURLOPT_HEADER, 0);
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, "Owen's AJAX Proxy");

$content = curl_exec($curl_handle);
$content_type = curl_getinfo($curl_handle, CURLINFO_CONTENT_TYPE);
curl_close($curl_handle);
header("Content-Type: $content_type");
echo $content;
ob_flush();
?>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文