JSON API(在 PHP 中创建)在请求时不会返回结果


JSON API (created in PHP) does not return results when requested

>我有一个用PHP创建的JSON API,它返回

?({"a":"b"})

当我输入时

"http://mylink.php?callback=?" 

在浏览器中。但是当我从桌面应用程序(使用 $.ajax)提供相同的链接时,不会返回结果。创建 JSON API 的 PHP 代码是

<?php
    header('Content-Type: application/javascript'); // Also tried application/json
    $results = array();
    $results['a'] = 'b';
    $encoded = json_encode($results);
    $encoded_callback = '?' . '(' . $encoded . ')';
    echo $encoded_callback;
    return $encoded_callback;
?>

javascript 代码只包含

$.ajax({
        url:url,
        dataType:"jsonp",
        success:function(data){
            ... some printing ...                
        }        
    });

到目前为止,当我使用另一个 JSON API(不是由我创建的)尝试它时,它工作正常。所以我假设问题出在我的 API 上。

怎么了?我觉得缺少一些东西,以便可以进行通信,但我不知道是什么以及在哪一端(服务器或客户端)。

$encoded_callback = '?' . '(' . $encoded . ')';

? 在 JavaScript 中不是有效的函数名称(它是一个运算符)。你应该把回调参数中指定的函数名放在那里(这不是??告诉jQuery生成一个唯一的名称)。

$encoded_callback = $_GET['callback'] . '(' . $encoded . ')';

更好的是:停止使用JSONP。绕过同一源策略是一种黑客攻击,该策略在许多方面限制了您(包括仅允许GET请求和公开您的API,而不是能够将其限制为特定来源)。

CORS 为跨源请求提供了一种非黑客的、完全标准的方法,您应该改用这种方法。