0

PHP を使用して URL に投稿する必要があります。現在は機能していますが、データの送信/投稿の後、(投稿先の Web サービスから) json 出力が得られ、出力をフレンドリーにする必要があります。競合しているため、ajaxでjqueryを使用できません。Web サービスと直接通信する必要がある

これが私のフォームです:

<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)が表示され、$contextをECHOすると、「リソース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 サービスへの書き込み中に、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>

更新 (カール付き) - 解決済み - IT WORKS !!!! これは機能します-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リクエストを実行したい場合は、他のファイル操作 (fopen など)を使用してコンテキストを作成し、デフォルトのコンテキスト オプションを設定できます。curlfile_get_contents()

例 :

 $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

Web サービスへのプロキシとして機能する PHP スクリプトを作成し、返された 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または、Tufan の回答にあるように、PHP で使用して結果を取得することもできます。

于 2012-05-19T20:32:00.887 に答える