目次
回复内容:

javascript - js跨域请求

Jun 06, 2016 pm 08:31 PM
javascript php

1

2

3

4

5

6

7

8

9

10

11

12

13

<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请求数据失败。
javascript - js跨域请求
php成功,为什么?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<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>

ログイン後にコピー
ログイン後にコピー

回复内容:

1

2

3

4

5

6

7

8

9

10

11

12

13

<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请求数据失败。
javascript - js跨域请求
php成功,为什么?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<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#...

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

See all articles