1

ユーザーが自分のメールアドレスを入力できるページがあります。ユーザーが「送信」をクリックすると、.php スクリプトが呼び出されます。このスクリプトでは、外部 Web サービスに対して POST が実行され、URL を含む応答が受信されます。次に、.php がその URL に移動します。

次のようになります。

<!DOCTYPE html>
<html>
<head>
    <title>Email</title>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
    <meta content="utf-8" http-equiv="encoding">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.css" />
    <link rel="stylesheet" href="themes/customtheme.css" />
    <link rel="stylesheet" href="style.css" />
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.js"></script>
</head>
<body>

<div data-role="page">

    <div data-role="header">
        <a class="ui-btn-left" href="index.html" data-icon="back">Back</a>
        <h1><span></span></h1>
        <a class="ui-btn-right" href="#" data-icon="info">i & &euro;</a>
    </div>

    <div data-role="content" data-position="relative">
        <div class="inform">
            <form method="POST" class="thedataform" position:relative action="send.php" >
                <span>Email adress:</span>
                <input type="text" name="email" id="email"></input>
                <div>
                    <input type="submit" style="width:100%" name="smsbutton" value="Send" >
                </div>
            </form
        </div>
    </div>

    <div data-role="footer" data-position="fixed">

    </div>
</div>
</body>
</html>

send.php は次のようになります。

<?php
    $xml = file_get_contents('xml.xml');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://other.webservice/yyy/");
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);

    $sXML = curl_exec($ch);
    curl_close($ch);

    $oXML = simplexml_load_string($sXML);
    $url = (string) $oXML->RETURNEDURL;

    if (isset($_POST["email"]))
    {
        $email = $_POST["email"];
    }
    else
    {
        $email = null;
    }

    session_start();
    $_SESSION['email'] = $email;
    setcookie("email", $email);
    header('Location: '.$url);
    exit;
?>

これで、send.php に直接移動すると、すべて正常に動作します。別の Web サイト (RETURNEDURL) にリダイレクトされます。

しかし、送信ボタンを使用して.phpを実行したい場合、問題が発生します。JQuery と JQuery Mobile を使用しているため、「ページの読み込み中にエラーが発生しました」というメッセージが表示されます。次のメッセージが FireBug に表示されます。

[12:53:31.097] POST http://myserver.com/send.php [HTTP/1.1 302 一時的に移動 1456ms]

次の 2 行のいずれかをコメントアウトすると、次のようになります。

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.js"></script>

リダイレクトは機能しますが、私のページはめちゃくちゃになります。HTTP から HTTPS ポストに移行するためにエラーが発生する可能性はありますか? ここで何が問題なのですか?

4

2 に答える 2

0

data-ajax="false" 属性をフォームに追加すると、最初のバージョンで意図したとおりに機能するはずです。詳細については、 http://jquerymobile.com/demos/1.2.1/docs/forms/forms-sample.htmlを確認してください。

于 2013-11-06T10:09:03.117 に答える
0

次のスクリプトを使用するように Web サイトを変更しました。

<script type="text/javascript">
    $(function() {
        $("#emailForm").submit(function() {
            console.log("Submit prevented.");
            $.ajax({
                type: "POST", 
                url: "send.php",     
                data: {
                    email: $("#email").val()
                },
            success: function(data) {
                    var obj = jQuery.parseJSON(data);
                    window.location = obj.url;
                }
            });
            return false;
        });
    });
</script>

send.php を次のように変更しました。

<?php
    $xml = file_get_contents('xml.xml');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://the.website/xxx/");
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);

    $sXML = curl_exec($ch);
    curl_close($ch);

    $oXML = simplexml_load_string($sXML);
    $url = (string) $oXML->RETURNEDURL;

    if (isset($_POST["email"]))
    {
        $email = $_POST["email"];
    } else {
        $email = null;
    }

    session_start();
    setcookie("email", $email);
    $arr = array("url"=>$url);
    echo(json_encode($arr));
?>

これで正常に動作するようになりました。

于 2013-11-04T14:26:15.623 に答える