JSON API(在 PHP 中创建)在请求时没有 return 结果

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

我在 PHP 中创建了一个 JSON API returns

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

当我输入

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

在浏览器中。但是,当我从桌面应用程序(使用 $.ajax)给出相同的 link 时,不会返回结果。创建 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 中的有效函数名称 (它是 an operator)。您应该将回调参数中指定的函数名称放在那里(这不是 ?? 告诉 jQuery 生成一个唯一的名称)。

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

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

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