php - JavaScript:如何创建 JSONP?

标签 php javascript json cross-domain jsonp

我有两个域,example1.com 和 example2.com

从 example1.com,我想调用我在 example2.com 上的 JSON API。知道这是不允许的,我突然想到 - 这正是 JSONP 被创建的原因。

问题是,如何修改我的 JSON API 以使其支持 JSONP?

基本上,我如何创建回调 api?

更新

我的服务器端语言是 PHP

最佳答案

这很简单。只需接受一个名为 callback 的参数在 GET 中。

然后将回调 JavaScript 函数包裹在您的数据周围。

PHP 中的示例:

<?php

$data = '{}'; // json string

if(array_key_exists('callback', $_GET)){

    header('Content-Type: text/javascript; charset=utf8');
    header('Access-Control-Allow-Origin: http://www.example.com/');
    header('Access-Control-Max-Age: 3628800');
    header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');

    $callback = $_GET['callback'];
    echo $callback.'('.$data.');';

}else{
    // normal JSON string
    header('Content-Type: application/json; charset=utf8');

    echo $data;
}

它的想法是简单地返回一个JavaScript文件,该文件以JSON对象作为JavaScript回调函数的第一个参数调用回调函数。

您可以使用内置的json_encode()函数从 PHP 中的数组和对象创建 JSON 字符串(在我们上面的示例中包含 $data)。

要使用 JSONP 服务,您可以使用 <script>标签:

<script>
    function receiver(data){
        console.log(data);
    }
</script>
<script src="data-service.php?callback=receiver"></script>

关于php - JavaScript:如何创建 JSONP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1678214/

相关文章:

json - readValue() 不能与 TypeReference 一起使用

php - 在 PHP 中计算模数($a 除以 $b 的余数)的最佳函数或方法是什么?

php - 文件名下划线前后匹配部分

php - 如何在 UML 类图中描述一个方法接受多种类型?

php - javascript 函数在 document.ready() 下无法正常工作

json - 如果结果类型为 json,则 Struts2 Action 被调用两次

php - json - 括号问题

javascript - 如何将 wp 插件中的 javascript 包含到网站上的所有页面?

javascript - 使用 javascript 填充页面 html div 元素

javascript - 仅当值大于 1 时显示 div Jquery