2017-08-21 54 views
0

我需要建立一个PHP简单的服务器和一个JavaScript脚本中的小脚本谁可以访问它。问题是我能找到的所有例子都不起作用。我只需要没有数据库的基本结构。只有一个将“hello world”字符串返回给javascript客户端或任何工作示例的方法(我可以从这一点开始工作)。我不知道使用Soap,nuSoap还是Rest服务器会更好。从Javascript消耗PHP web服务

举例说:

我有这样的WS:

<?php 

require_once('lib/nusoap.php'); 

class predictiveUrlsPreloadService { 

    public function getUrls($type) { 
     switch ($type) { 
      case 'GA': 
       return 'Google Analytics code'; 
       break; 
      case 'AA': 
       return 'Adobe Analytics code'; 
       break; 
      default: 
       break; 
     } 
    } 
} 

$server = new soap_server(); 
$server->configureWSDL("foodservice", "http://www.greenacorn-websolutions.com/foodservice"); 

$server->register("predictiveUrlsPreloadService.getUrls", 
    array("type" => "xsd:string"), 
    array("return" => "xsd:string"), 
    "http://localhost/predictiveUrlsPreloadService/service.php", 
    "http://localhost/predictiveUrlsPreloadService/service.php#getUrls", 
    "rpc", 
    "encoded", 
    "Descripci"); 

@$server->service(file_get_contents("php://input")); 

而这个PHP客户端工作:

<script 
    src="https://code.jquery.com/jquery-3.2.1.min.js" 
    integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" 
    crossorigin="anonymous"> 
</script> 

<?php 

require_once('lib/nusoap.php'); 

$wsdl = "http://localhost/predictiveUrlsPreloadService/wsdl.wsdl"; 

$client = new nusoap_client($wsdl, true); 
$error = $client->getError(); 

if ($error) { 
    print_r($error); 
} 

$result = $client->call("predictiveUrlsPreloadService.getUrls", array("type" => 'GA')); 

if ($client->fault) { 
    print_r($result); 
} else { 
    $error = $client->getError(); 
    if ($error) { 
     print_r($error); 
    } else { 
     echo $result; 
    } 
} 

?> 

所有这一切都与它的WSDL。我只需要知道如何使用javascript或ajax打电话:

$.ajax({ 
    url: 'http://localhost/predictiveUrlsPreloadService/service.php', 
    type: "predictiveUrlsPreloadService.getUrls", 
    data: { 
     'type' : 'AA' 
    }, 
    success: function (response) { 
    console.dir(response); 
    } 
}); 

但它只返回ws信息。我怎样才能做到这一点?

+0

如果您发现例子,他们不工作,使他们的工作。简化他们,如果他们做比你想要的更多。 – ryantxr

+0

当然,但是我创建的例子只有服务器端,并且不知道它们是否工作,因为我不知道如何构建客户端。 – Noark

回答

0

这比我想象的要简单。

这是在PHP中的NuSOAP服务器:

<?php 
    require_once('nusoap.php'); 

    $server = new soap_server(); 
    $server->configureWSDL("PredictiveUrlPreloadXML", "urn:PredictiveUrlPreloadXMLwsdl"); 
    $server->wsdl->schemaTargetNamespace = "urn:PredictiveUrlPreloadXMLwsdl"; 

    function getUrls($type) { 
     switch ($type) { 
      case 'GA': 
       return 'GA code'; 
       break; 
      case 'AA': 
       return 'AA code'; 
       break; 
      default: 
       return null; 
       break; 
     } 
    } 

    $server->register(
     'getUrls',          
     array(          
      'type'   => 'xsd:string', 
     ),    
     array(
      'return'  => 'xsd:string' 
     ),    
     'urn:PredictiveUrlPreloadXMLwsdl',    
     'urn:PredictiveUrlPreloadXMLwsdl#getUrls', 
     'rpc',          
     'encoded',          
     'Desc'  
    ); 

    @$server->service(file_get_contents("php://input")); 

?> 

,这是JavaScript客户端:

<script> 

    var soapMessage = 
     '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'+ 
      '<soap:Body>'+ 
       '<getUrls xmlns="urn:PredictiveUrlPreloadXMLwsdl">'+ 
        '<type>GA</type>'+ 
       '</getUrls>'+ 
      '</soap:Body>'+ 
     '</soap:Envelope>'; 

    $.ajax({ 
     url: "http://localhost/predictive_url_preload/ws.php", 
     type: "POST", 
     dataType: "xml", 
     contentType: "text/xml", 
     data: soapMessage, 
     success: function(data, status, req) { 
      //TODO 
     }, 
     error: function (data, status, req) { 
      console.log(req); 
     } 
    }); 

</script>