Ajax没有在JSONP调用中加载成功

时间:2018-01-05 09:19:01

标签: php jquery ajax jsonp

我有点卡在这里。我试图通过JSONP和Ajax从PHP脚本获取JSON数据(来自Twitter API的推文)。类(TwitterProxy)没有问题,因为数据从PHP到达很好,我可以在使用Firefox的开发工具的响应中看到JSON但是成功方法没有加载。

Firefox(无法加载脚本)和Chrome(net :: ERR_SPDY_PROTOCOL_ERROR)也给我一个错误,除了错误函数在Chrome中给我一个404错误代码。有任何想法吗?

你可以在这里写nasa: http://diegovelserver.epizy.com/

Javascript

$(document).ready(function() {
    $('.btn').click(function (){
        showNSave();
    });
    $('.user').bind("enterKey", function (){
        showNSave();
    });
    $('.user').keyup(function (e){
        if(e.keyCode == 13) {
            $(this).trigger("enterKey");
        }
    });
});

function showNSave () {
    doRequest($('.user').val());

}

function doRequest (user){
    $.ajax({
        url: 'https://diegovelserver.000webhostapp.com/php/app.php',
        type:'GET',
        data: {data: user},
        jsonp: "callback",
        dataType: 'jsonp',
        success: function(data){
            alert("success");
            $('.jsonpResult').html(data);
        },
        error: function (e) {
            console.log(e.responseType);
            console.log(e.status);
        }
    });
}

PHP

<?php


class TwitterProxy
{
    private $config = [
        'use_whitelist' => false, // Marcar false para permitir conexiones ajenas a Twitter
        'base_url' => 'https://api.twitter.com/1.1/'
    ];

    private $whitelist = [];

    public function __construct($oauth_access_token, $oauth_access_token_secret, $consumer_key, $consumer_secret, $screen_name, $count = 5)
    {
        $this->config = array_merge($this->config, compact('oauth_access_token', 'oauth_access_token_secret', 'consumer_key', 'consumer_secret', 'user_id', 'screen_name', 'count'));

        $this->whitelist['statuses/user_timeline.json?' . 'screen_name=' . $this->config['screen_name'] . '&count=' . $this->config['count']] = true;
    }

    private function buildBaseString($baseURI, $method, $params)
    {
        $r = [];
        ksort($params);
        foreach ($params as $key=>$value) {
            $r[] = "$key=" . rawurlencode($value);
        }

        return $method . "&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
    }

    private function setOauthKeys(){
        print_r($this->config);
    }

    private function buildAuthorizationHeader($oauth)
    {
        $r = 'Authorization: OAuth ';
        $values = [];
        foreach ($oauth as $key => $value) {
            $values[] = "$key=\"" . rawurlencode($value) . "\"";
        }
        $r .= implode(', ', $values);

        return $r;
    }

    public function get($url)
    {
        if (! isset($url)) {
            die('No URL set');
        }

        if ($this->config['use_whitelist'] && ! isset($this->whitelist[$url])) {
            die('URL is not authorised');
        }

        $url_parts = parse_url($url);
        parse_str($url_parts['query'], $url_arguments);

        $full_url = $this->config['base_url'] . $url;
        $base_url = $this->config['base_url'] . $url_parts['path'];

        $oauth = [
            'oauth_consumer_key' => $this->config['consumer_key'],
            'oauth_nonce' => time(),
            'oauth_signature_method' => 'HMAC-SHA1',
            'oauth_token' => $this->config['oauth_access_token'],
            'oauth_timestamp' => time(),
            'oauth_version' => '1.0'
        ];

        $base_info = $this->buildBaseString($base_url, 'GET', array_merge($oauth, $url_arguments));


        $composite_key = rawurlencode($this->config['consumer_secret']) . '&' . rawurlencode($this->config['oauth_access_token_secret']);

        $oauth['oauth_signature'] = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));

        $header = [
            $this->buildAuthorizationHeader($oauth),
            'Expect:'
        ];
        $options = [
            CURLOPT_HTTPHEADER => $header,
            //CURLOPT_POSTFIELDS => $postfields,
            CURLOPT_HEADER => false,
            CURLOPT_URL => $full_url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_SSL_VERIFYPEER => false
        ];

        $feed = curl_init();
        curl_setopt_array($feed, $options);
        $result = curl_exec($feed);
        $info = curl_getinfo($feed);
        curl_close($feed);

        if (isset($info['content_type']) && isset($info['size_download'])) {
            header('Content-Type: ' . $info['content_type']);
            header('Content-Length: ' . $info['size_download']);
        }

        return $result;
    }
}

//----------------------------------------------------troubles begins here------
$user = $_GET['data'];

$twitterConexion = new TwitterProxy(
    '913141342070542337-1eFZgaABcUpCIP8M4n95f2kSxdnWLtL',
    'ElpTj4OvHMiNN8mlTOKplOp8RZR70ZC7cyUJqQymwumPP',
    'HR9fwpQuYwqzIY7mh2ZNqM59F',
    'CasF1JnHDGo9rjYlXKvUeUboeKovmzSGVEBNAYiD1JJRC4mSkb',
    $user,
    1);

$twitter_url = 'statuses/user_timeline.json';
$twitter_url .= '?screen_name=' . $user;
$twitter_url .= '&count=3';

$tweets = $twitterConexion->get( $twitter_url );

echo json_encode($tweets);

?>

0 个答案:

没有答案