0

我必须使用 PHP 发布到 URL。现在它可以工作,但是在发送数据/发布之后,它会给出一个 json 输出(来自我发布到的 Web 服务),我需要输出友好。我不能将 jquery 与 ajax 一起使用,因为它是冲突的。我需要直接与网络服务通信

这是我的表格:

<form action="http://somewebservice.com/<?php echo $PrizeID;?>" method="post" name="myform">
<input name="account" id="account" type="hidden" value="<?php echo $account;?>"/>
<input name="dob" id="dob" type="hidden"  value="<?php echo $dob;?>"/>
<input name="site" id="site" type="hidden"  value="<?php echo $site;?>"/>
<input name="submit" type="submit" value="submit"/>
</form>

单击提交后,它会将我带到具有以下 JSON 输出的页面:

{"Prize":"XXXXXX","ConfirmationCode":"######","Error":false,"ErrorMsg":null}

发布工作正常,因为我检查了 Web 服务日志并注册了提交。我现在需要做的就是显示 ConfirmationCode上面的格式,而不是整个 JSON 输出。任何帮助将不胜感激。

更新 我根据你的帮助做了一些更改......它刷新了页面但不更新数据库。我检查了网络服务日志,没有记录任何条目。它给我 bool(false) 作为错误,当 ECHOing $context 时,我得到“资源 id#4”

这是更新的表格:

<form name="myform">
<input name="account" id="account" type="hidden" value="<?php echo $account;?>"/>
<input name="dob" id="dob" type="hidden"  value="<?php echo $dob;?>"/>
<input name="site" id="site" type="hidden"  value="<?php echo $site;?>"/>
<input name="submit" type="submit" value="submit"/>
</form>

这是PHP

if(isset($_POST['submit'])){
$options = array(
            'http'=>array(
                'method'=>"POST",
                'contentType'=> "application/x-www-form-urlencoded",
                'content'=>http_build_query(array(
                        'account' => $account,
                        'dob' =>   $dob,
                        'site' => $site
                    ))
            ));

        $context = stream_context_create($options);
        $result =  file_get_contents("http://somewebservice.com/{$PrizeID}",NULL,$context);
        var_dump($result);
}

更新(使用 AJAX) 我尝试了 ajax,当它写入 Web 服务时,我在客户端站点中收到错误消息。错误说 [object Object] 这是 ajax

这是表格

<form name="myform" >
<input name="account" id="account" type="hidden" value="<?php echo $account;?>"/>
<input name="dob" id="dob" type="hidden"  value="<?php echo $dob;?>"/>
<input name="site" id="site" type="hidden"  value="<?php echo $site;?>"/>
<input id="submit" type="submit" value="submit"/>
<div id="result"></div>

这是ajax脚本:

<script type="text/javascript">
$("#submit").click(function(e){
    e.preventDefault(); 
    var account = $('#account').val();
    var dob = $('#dob').val();
    var site = $('#site').val();

    $.ajax({
        type: "POST",
        url: "http://somewebservice.com/<?php echo $PrizeID;?>",
        data: "{ 'account': '" + account + "','dob': '" + dob + "', 'site': '" + site + "'}",
        contentType: "application/json; charset=utf-8",
        async: false,
        success: function(data) {
            //$('#result').text(data.d);
            alert(data);
            var obj = $.parseJSON(data);
                $("#result").html("<p><b>Confirmation Code:</b> " + obj.ConfirmationCode + "</p>");
        },
        error: function(data) {
            alert(data);
            $("#result").html("<b>There was an error. Please try again</b><br/>");

        }
    });
});
</script>

更新(带卷曲) - 已解决 - 它有效!!!! 这有效 - 它通过 Web 服务发布到数据库,我能够取回 Web 服务返回的 ConfirmationCode。

这是 offer.php 中的表格

<form action="process.php" method="post" name="myform">
<input id="submit" type="submit" value="submit"/>
</form>

这是 process.php 文件

<?php
$data = array("account" => "{$account}", "dob" => "{$dob}", "site" => "{$site}");                                                                    
$data_string = json_encode($data); 

$ch = curl_init("http://somewebservice.com/{$PrizeID}");                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data_string))                                                                       
);                                                                                                                   
$result = curl_exec($ch);                            
curl_close($ch);
$json_result = json_decode($result, true);
?>
// here's the call for the confirmation number
<p>Your confirmation number is: <strong><?php echo $json_result['ConfirmationCode'];?></strong></p>
4

2 回答 2

3

如果您想在没有 的情况下执行POST请求curl,您可以使用file_get_contents()和其他文件操作(fopen 等)创建上下文设置默认上下文选项

例子 :

 $options = array(
            'http'=>array(
                'method'=>"POST",
                'content'=>http_build_query(array(
                        'account' => $account,
                        'dob' =>   $dob,
                        'site' => $site
                    ))
            ));

        $context = stream_context_create($options);
        $result =  file_get_contents("http://somewebservice.com/{$PrizeID}",NULL,$context);
        var_dump($result);
于 2012-05-19T20:31:35.453 回答
2

您可以创建一个 PHP 脚本来充当 Web 服务的代理,然后根据需要格式化返回的 JSON。

您的表单标签将更改为:

<form action="http://myaddress.com/myproxyscript.php" method="post" name="myform">

然后myproxyscript.php会是这样的:

<?php
$postvars=file_get_contents("php://input");

$curl=curl_init("http://somewebservice.com/{$PrizeID}");
curl_setopt($curl,CURLOPT_POSTFIELDS,$postvars);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
$result=curl_exec($curl);
$decodedresult=json_decode($result,true);
// do stuff with result here...
?>

或者您可以file_get_contents在 PHP 中使用来获取 Tufan 的答案中给出的结果。

于 2012-05-19T20:32:00.887 回答