javascript - js跨域请求
<code>$.ajax({ url : "http://apis.baidu.com/apistore/iplookupservice/iplookup?ip="+window.location.href, beforeSend: function(request) { request.setRequestHeader("apikey", "1f5cb934618472891347834b2bf64c8d"); }, type:"GET", dataType : "jsonp", success : function(data){ console.log(data); } }); </code>
js请求数据失败。
php成功,为什么?
<code>$ch = curl_init(); $url = 'http://apis.baidu.com/apistore/iplookupservice/iplookup?ip='.$_SERVER['REMOTE_ADDR']; $header = array( 'apikey:1f5cb934618472891347834b2bf64c8d', ); // 添加apikey到header curl_setopt($ch, CURLOPT_HTTPHEADER , $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 执行HTTP请求 curl_setopt($ch , CURLOPT_URL , $url); $res = curl_exec($ch); $info = json_decode($res); </code>
回复内容:
<code>$.ajax({ url : "http://apis.baidu.com/apistore/iplookupservice/iplookup?ip="+window.location.href, beforeSend: function(request) { request.setRequestHeader("apikey", "1f5cb934618472891347834b2bf64c8d"); }, type:"GET", dataType : "jsonp", success : function(data){ console.log(data); } }); </code>
js请求数据失败。
php成功,为什么?
<code>$ch = curl_init(); $url = 'http://apis.baidu.com/apistore/iplookupservice/iplookup?ip='.$_SERVER['REMOTE_ADDR']; $header = array( 'apikey:1f5cb934618472891347834b2bf64c8d', ); // 添加apikey到header curl_setopt($ch, CURLOPT_HTTPHEADER , $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 执行HTTP请求 curl_setopt($ch , CURLOPT_URL , $url); $res = curl_exec($ch); $info = json_decode($res); </code>
jQuery中type为jsonp的ajax是不允许自定义请求头的,虽然你在beforeSend里面加了自定义的头apikey,但是由于jsonp的实现是通过<script>标签而不是XMLHttpRequest对象,你设置的自定义头是无效的,所以百度返回给你的结果是Missing apikey。<br> 参考:http://www.jquery123.com/jQuery.ajax/ (搜索“愚人码头注”字眼)</script>
建议:在服务器端做个接口,接口中直接访问百度的API,再把结果返回。
服务器返回的数据格式不对,不应该返回json,应该返回这种格式:
callback({你的json数据内容});
此类api不提供ajax查询 必须在http请求头添加一个指定值的apikey
你不是写明了 JSONP
请求么,那么返回的应该是 JavaScript
代码而非 JSON
数据。
问题还是跨域。
php可以,是因为百度服务端请求头里面设置apikey成功了,
javascript不可以,是因为跨域的规则没通过。 具体是,预请求options 从百度返回的http头部值Access-Control-Request-Headers:*,验证没通过,这一项要列出具体的值(比如apikey),不能是通配符。
参考 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#...

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

To work on file upload we are going to use the form helper. Here, is an example for file upload.

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

Validator can be created by adding the following two lines in the controller.

Logging in CakePHP is a very easy task. You just have to use one function. You can log errors, exceptions, user activities, action taken by users, for any background process like cronjob. Logging data in CakePHP is easy. The log() function is provide

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

CakePHP is an open source MVC framework. It makes developing, deploying and maintaining applications much easier. CakePHP has a number of libraries to reduce the overload of most common tasks.
