我必须使用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>
答案 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回答中给出的结果。