【问题标题】:How to send data using JSONP from localhost to domain.com如何使用 JSONP 从 localhost 向 domain.com 发送数据
【发布时间】:2013-09-05 06:40:22
【问题描述】:

我正在尝试将数据作为jsonlocalhost 发送到网站domain.com,我看到jquery 在使用cross-domains 时无法发送它;

然后我读到jsonp,现在我不知道如何编写代码;

不知何故,我需要用 jsonp 调用替换 news 函数中的代码;

<script>
    function news(data) {
        $.ajax({
            'url': 'http://domain.com/index.php/api/news',
            'data': {'data': data},
            'success': function(data) {
            },
            dataType: 'json'
        });
    }
    function unique(data) {
        $.ajax({
            'url': 'http://localhost/fb-group/index.php/api/unique',
            'data': {'data': data},
            'success': function(data) {
                if (data && (data.status === 1) && data.news) {
                    news(data.news);
                }
            },
            dataType: 'json'
        });
    }
    access_token = 'token';
    $.ajax({
        'url': 'https://graph.facebook.com/453240374771082?fields=feed&method=GET&format=json&suppress_http_code=1&access_token=' + access_token,
        'data': '',
        'success': function(data) {
            if (data && data.feed && data.feed.data) {
                allData = data.feed.data;
                $.each(allData, function(index, value) {
                    unique(value);
                });
            }
        },
        dataType: 'json'
    });
</script>

在服务器端可以吗?

这就是我如何捕捉、解析和保存通过 ajax 调用收到的日期

    public function actionNews() {
        $data = json_encode($_GET['data']);
        $data_decoded = json_decode($data);
//        print_r($data_decoded);
        $model_feedM = new FeedMLive();
        $model_feedM->data_id = $data_decoded->id;
        $model_feedM->data_from_name = $data_decoded->from->name;
        $model_feedM->data_from_id = $data_decoded->from->id;
        $model_feedM->data_to_data_name = $data_decoded->to->data[0]->name;
        $model_feedM->data_to_data_id = $data_decoded->to->data[0]->id;
        $model_feedM->data_message = strlen($data_decoded->message) > 0 ? $data_decoded->message : 'unknown';
        $model_feedM->data_picture = isset($data_decoded->picture) ? $data_decoded->picture : 'unknown';
        $model_feedM->data_link = isset($data_decoded->link) ? $data_decoded->link : 'unknown';
        $model_feedM->views = 0;
        $model_feedM->created = time();
        $model_feedM->status = FeedM::ACTIVE;
        if ($model_feedM->validate() && $model_feedM->save())
            echo '{"status_live":"1"}';
        else
            echo '{"status_live":"0"}';
        exit;
    }

【问题讨论】:

  • 只需将dataType: 'json' 更改为dataType: 'jsonp'?请注意,JSONP 只是将 script 元素添加到 DOM,因此您的数据将通过查询字符串中的 data 关键字发送。当然服务器也必须从 URL 中读取值。

标签: javascript jquery jsonp


【解决方案1】:
<script>
function news(data) {
    $.ajax({
        'url': 'http://domain.com/index.php/api/news?callback=?',
        'data': {'data': data},
        'success': function(data) {
        },
        dataType: 'json'
    });
}
function unique(data) {
    $.ajax({
        'url': 'http://localhost/fb-group/index.php/api/unique?callback=?',
        'data': {'data': data},
        'success': function(data) {
            if (data && (data.status === 1) && data.news) {
                news(data.news);
            }
        },
        dataType: 'json'
    });
}
access_token = 'token';
$.ajax({
    'url': 'https://graph.facebook.com/453240374771082?fields=feed&method=GET&format=json&suppress_http_code=1&access_token=' + access_token+'&callback=?',
    'data': '',
    'success': function(data) {
        if (data && data.feed && data.feed.data) {
            allData = data.feed.data;
            $.each(allData, function(index, value) {
                unique(value);
            });
        }
    },
    dataType: 'json'
});

服务器获取“回调”参数并返回数据包括“回调”参数的值, 这是jquery的跨域!

【讨论】:

  • 我正在检查,请稍候
  • 什么?什么都不返回?
  • 服务器数据格式:echo $_REQUERT["callback"].'('.json_encode(data).')';
猜你喜欢
  • 2016-05-30
  • 2012-01-16
  • 2014-01-21
  • 2020-08-25
  • 2013-06-21
  • 2011-06-08
  • 1970-01-01
  • 2016-10-29
  • 2019-11-22
相关资源
最近更新 更多