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

时间:2016-02-19 19:14:46

标签: php json api callback jsonp

我在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。

有什么问题?我觉得缺少某些东西,以便可以进行沟通,但我不知道在哪一方(服务器或客户端)。

1 个答案:

答案 0 :(得分:2)

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

? 在JavaScript中不是有效的函数名称(它是an operator)。你应该把callback参数中指定的函数名放在那里(不是??告诉jQuery生成一个唯一的名字)。

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

更好的是:停止使用JSONP。绕过相同的原始策略是一种破坏,这种策略在很多方面限制了您(包括仅允许GET请求并使您的API公开,而不是将其限制为特定的来源)。

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