2017-05-25 50 views
0

我有一个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 + "&currentSnapshotName=" + currentSnapshotName + 
        "&configId=" + currentConfigId + "&ttData=" + JSON.stringify(timeTable) + 
        "&feData=" + JSON.stringify(fixedEntry)); 

现在,而不是调用PHP文件saveSnapshot功能使用javascript ajax,我想从其他一些PHP文件调用saveSnapshot函数。

我该怎么做?我该如何拨打电话?我如何传递参数?

+0

你可以去看一下PHP'cURL' - http://codular.com/curl-with-php – Diego

+0

有几种方法,但我更喜欢卷曲作为最简单的方法。 – richbai90

+0

@Diego你可以发表一些关于此的代码吗? – user5155835

回答

1

卷曲发现是一个不错的选择,如果你不想在下面添加外部库的例子: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)); 
+0

感谢您的卷曲代码。另外,在'reqType'=> $ saveNewSnapshot中,$不应该在那里,它应该只是'reqType'=> saveNewSnapshot。由于saveNewSnaphot是函数名称 – user5155835

+0

啊,我没有意识到这是一个函数!希望这回答你的问题!如果是这样,我会很感激,如果你可以接受这个作为你的答案:) –

+0

你可以进行更改,使$ saveNewSnapshot保存新快照 – user5155835

0

这里不需要额外的库......你可以使用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)); 
0

基本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);