如何使用PHP发送数据到URL而不卷曲

时间:2012-05-19 20:26:52

标签: php ajax json

我必须使用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输出。 任何帮助都会非常感激。

更新 我根据你的帮助做了一些改变...... 它刷新页面但不更新数据库。我检查了Web服务日志,没有记录任何条目。 它给我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和i,当它写入Web服务时,我在clietn网站上收到错误。错误说[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>

更新(w / Curl) - 已解决 - 工作正常!!!! 这有效 - 它通过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>

2 个答案:

答案 0 :(得分:3)

如果您想在没有POST的情况下执行curl请求,可以使用file_get_contents()和其他文件操作(fopen等)create a context和{{3} },

示例:

 $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);

答案 1 :(得分: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...
?>

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