PHP等同于JQuery AJAX jsonp

时间:2016-03-19 22:02:22

标签: javascript php jquery ajax

我正在尝试在服务器端进行以下查询,这意味着除非我想安装服务器端JS框架,否则我需要在PHP中进行。我之前使用CURL进行POST,但它似乎不适用于此。这是我需要复制的代码:

         $.ajax({
            url: "https://stuff.com/stuff/stuff/?callback=?",
            dataType: 'jsonp',
            cache: false,
            data: 
            {
                a: A,
                b: B,
                c: C,
                d: D
            },
            success: function(data){
                console.log(data);
            },
            error: function(jqXHR, textStatus, errorThrown){
                console.log("Error Thrown: " + errorThrown);
            }  
        });

A,B,C和D都将作为URL参数传递给PHP脚本。有什么建议怎么做?

由于

编辑:

<?php
    $request = curl_init();
    curl_setopt($request, CURLOPT_URL, 'blah/?callback=?');
    curl_setopt($request,CURLOPT_CONNECTTIMEOUT,2);
    curl_setopt($request,CURLOPT_RETURNTRANSFER,1);\

    $buffer = curl_exec($request);
    curl_close($request);
    echo $buffer;
?>

这就是我现在所拥有的,但我不知道如何添加jsonp参数。我相信它们会进入URL,但我无法弄清楚如何格式化它们。

1 个答案:

答案 0 :(得分:1)

您可以使用http_build_query生成查询字符串。

此示例使用YQL端点进行演示(因为,毫不奇怪,blah/?callback=?无法解析我)。 qformat等会在问题中映射到ab等。

<?php

$url = "https://query.yahooapis.com/v1/public/yql";

$query = array(
    "q" => 'SELECT * FROM google.books WHERE q="barack obama" AND maxResults=1',
    "format" => "json",
    "env" => "store://datatables.org/alltableswithkeys",
    "callback" => "callback_name",
);

$url = $url . "?" . http_build_query($query);

$request = curl_init();
curl_setopt($request, CURLOPT_URL, $url);
curl_setopt($request, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);

$buffer = curl_exec($request);
curl_close($request);
echo $buffer;

?>

然后,您需要从响应中删除填充。

JSONP是一个(相当肮脏)黑客,可以在浏览器中绕过相同的原始策略。在不涉及浏览器的情况下发出请求时不需要它,因此如果要请求数据的端点支持普通JSON,请改用它。