php - 从 JQuery (Ajax) 调用 PHP SOAP Web 服务

标签 php jquery ajax soap

我有一个 PHP SOAP Web 服务作为调用跨域 Web 服务的中继。我遇到的问题是从 JavaScript 调用本地 PHP Web 服务方法(使用 JQuery/Ajax)。我想调用我的网络服务中的特定方法;例如“登录帐户”;

我对在 url 中附加参数然后弄清楚要调用哪个方法不感兴趣...这在 .NET (mywebservice.asmx/LoginToAccount") 中非常简单,但无法弄清楚如何让它在 PHP 中工作。

我不断收到“错误请求”的“500 内部服务器错误”: 错误请求

这是我的 PHP 代码:

<?php 

function LoginToAccount($email, $passCodeHash) { 
    //...code calling cross-domain web services
    return $jsonEncodedResponse;
  }


function CreateAccount($email, $passCodeHash){
    //...code calling cross-domain web services
    return $jsonEncodedResponse;
}

$server = new SoapServer(null, array('uri'  => "http://www.myurl/webservices/"));

$server->addFunction('LoginToAccount');
$server->addFunction('CreateAccount');
$server->handle();
?>

这是我的 JavaScript 代码:

function AjaxCall() {
    $.ajax({
        type: "POST",
        url: "phpRelay.php/LoginToAccount",
        data: "{email : 'myEmail@email.com', passCodeHash: '12345'}",
        contentType: "application/json",
        dataType: "json",
        success: succeeded,
        error: queryError
    });
}

function succeeded(data, textStatus, request) {
    var result = $.parseJSON(data.d);

}

function queryError(request, textStatus, errorThrown) {
    alert(request.responseText, textStatus + " " + errorThrown);
}

这一切都在同一个域中。谢谢!

最佳答案

您可以使用以下代码替换它,而不是使用 php Soapserver:

echo $data = (function_exists($_SERVER['QUERY_STRING'])) ? json_encode(array('d'=>$_SERVER['QUERY_STRING'](file_get_contents('php://input')))) : 'error: function does not exists';

它的作用是使用 query_string 作为函数名称。它首先检查该函数是否存在,如果不存在,则打印错误,但如果 et 存在,它将以字符串格式调用以发布的数据作为条件的函数。最后将函数返回的数据打印为json数组,结果集为d。

所以你的 JavaScript 应该如下所示(注意 url 调用应该在函数之前使用 ? 而不是/):

function AjaxCall() {
    $.ajax({
        type: "POST",
        url: "phpRelay.php?LoginToAccount",
        data: "{email : 'myEmail@email.com', passCodeHash: '12345'}",
        contentType: "application/json",
        dataType: "json",
        success: succeeded,
        error: queryError
    });
}

function succeeded(data, textStatus, request) {
    var result = $.parseJSON(data.d);

}

function queryError(request, textStatus, errorThrown) {
    alert(request.responseText, textStatus + " " + errorThrown);
}

希望这可以帮助你!我知道发布这个有点晚了,但如果还有其他人需要这样的东西,我就会发布它!我需要它,但找不到这样的解决方案,所以我必须自己制定解决方案。

干杯 c_bb

关于php - 从 JQuery (Ajax) 调用 PHP SOAP Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6255245/

相关文章:

ajax - thymeleaf ajax 磁贴中的 Spring *{} 字段

PHP - 时差(HH :MM format)

php - 检查图像修改时间的 HTACCESS 图像缓存规则

php - UPDATE 查询中没有更新一列

javascript - Jquery 插件 FlipClockjs 不起作用

javascript - 使用 AngularJS 在窗口调整大小时调整 div 大小

php - 寻找可以测试其他人的成人图像的裸体图像过滤器

javascript - 定义数组的长度在 javascript 中返回 0

jquery - 访问控制允许来源-本地主机

php - 如何在laravel中提交表单之前将图像或大文件上传到临时文件夹