相当于PHP的Javascript的XMLHttpRequest的
我有一个PHP函数:相当于PHP的Javascript的XMLHttpRequest的
function saveSnapshot() {
header("Content-Type: application/JSON: charset=UTF-8");
global $CFG;
$resString = "{\"Success\": \"True\"}";
$snapshotName = getArgument("snapshotName");
$user = getArgument("userId");
$ttd = getArgument("ttData");
$fed = getArgument("feData");
$ttData = json_decode($ttd, true);
$feData = json_decode($fed, true);
我打电话使用Javascript Ajax调用这个函数:
xhttp.open("POST", "myfile.php", true); // asynchronous
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("reqType=saveNewSnapshot&newSnapshotName=" + newSnapshotName + "¤tSnapshotName=" + currentSnapshotName +
"&configId=" + currentConfigId + "&ttData=" + JSON.stringify(timeTable) +
"&feData=" + JSON.stringify(fixedEntry));
现在,而不是调用PHP文件saveSnapshot功能使用javascript ajax,我想从其他一些PHP文件调用saveSnapshot函数。
我该怎么做?我该如何拨打电话?我如何传递参数?
卷曲发现是一个不错的选择,如果你不想在下面添加外部库的例子:http://php.net/manual/en/ref.curl.php
// Initialize curl object
$ch = curl_init();
// Create post data
$data = array(
'reqType' => saveNewSnapshot,
'newSnapshotName' => $newSnapshotName,
'currentSnapshotName' => $currentSnapshotName,
'configId' => $currentConfigId,
'ttData' => $timeTable,
'feData' => $fixedEntry
);
// Set curl options
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => 1, // Return information from server
CURLOPT_URL => 'myfile.php',
CURLOPT_POST => 1, // Normal HTTP post
CURLOPT_POSTFIELDS => $data
));
// Execute curl and return result to $response
$response = curl_exec($ch);
// Close request
curl_close($ch);
我更喜欢使用像狂饮图书馆,因为它允许我不必重新创建*。
狂饮例子: http://docs.guzzlephp.org/en/latest/overview.html
use GuzzleHttp\Client;
$client = new Client([
'base_uri' => '/',
'timeout' => 2.0,
]);
// Create post data
$data = array(
'reqType' => saveNewSnapshot,
'newSnapshotName' => $newSnapshotName,
'currentSnapshotName' => $currentSnapshotName,
'configId' => $currentConfigId,
'ttData' => $timeTable,
'feData' => $fixedEntry
);
$response = $client->post('myfile.php', array($data));
感谢您的卷曲代码。另外,在'reqType'=> $ saveNewSnapshot中,$不应该在那里,它应该只是'reqType'=> saveNewSnapshot。由于saveNewSnaphot是函数名称 – user5155835
啊,我没有意识到这是一个函数!希望这回答你的问题!如果是这样,我会很感激,如果你可以接受这个作为你的答案:) –
你可以进行更改,使$ saveNewSnapshot保存新快照 – user5155835
这里不需要额外的库......你可以使用file_get_contents()来POST,并且php有函数来构建url。我可能会使它看起来像这样:
<?php
$query = http_build_query(
array(
'reqType' => 'data',
'newSnapshotName' => 'example',
'currentSnapshotName' => '1',
'configId' => '2',
'ttData' => '4',
'feData' => '5'
)
);
$options = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded'
)
);
file_get_contents('http://server.com/myfile.php?' . $query, false, stream_context_create($options));
基本cURL示例。更多选项可以在http://php.net/manual/en/function.curl-setopt.php
<?php
$curl = curl_init();
// set the options we want
curl_setopt_array($curl, array(
// Return the response from the server
CURLOPT_RETURNTRANSFER => 1,
// The URL we wish to post to
CURLOPT_URL => 'myfile.php'
// Add our headers
CURLOPT_HTTPHEADER => array(
'Content-Type: application/JSON: charset=UTF-8'
)
// Post
CURLOPT_POST => 1,
// Set post fields
CURLOPT_POSTFIELDS => array(
reqType => 'saveNewSnapshot',
newSnapshotName= => 'newSnapshotName'
// ...
)
));
// Send the request & save response to $resp
$resp = curl_exec($curl);
// Close request to clear up some resources
curl_close($curl);
你可以去看一下PHP'cURL' - http://codular.com/curl-with-php – Diego
有几种方法,但我更喜欢卷曲作为最简单的方法。 – richbai90
@Diego你可以发表一些关于此的代码吗? – user5155835