我正在尝试在服务器端进行以下查询,这意味着除非我想安装服务器端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,但我无法弄清楚如何格式化它们。
答案 0 :(得分:1)
您可以使用http_build_query
生成查询字符串。
此示例使用YQL端点进行演示(因为,毫不奇怪,blah/?callback=?
无法解析我)。 q
,format
等会在问题中映射到a
,b
等。
<?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,请改用它。