Отправить данные через cURL без перезагрузки страницы - PullRequest
1 голос
/ 24 ноября 2010

На странице iframe в Facebook (не на вкладке) я хотел бы публиковать данные во внешнем API с помощью cURL, но я бы предпочел, чтобы страница моей формы не перезагружалась.

Я бы хотел, чтобы произошел какой-нибудь jquery ajax (сообщение «отправка данных» при отправке формы и сообщение об успешном завершении curl_exec).Я думал о создании скрытого iframe с дублирующейся формой и обновлении значений в этой форме при изменениях событий, но я не совсем понимаю, как бы я реализовал этот обмен между PHP и jquery.

Есть ли лучший способ?Вот код, над которым я работаю:

ОБНОВЛЕННЫЙ КОД С ВОЗВРАЩЕНИЕМ ЛОЖЕЙ - Не отправляет данные формы.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
</head>

<body class="fb_canvas-resizable <?php print $body_classes; ?>">
    <?php echo $message; ?>
    <div class="container">
        <div class="header"></div>
        <div class="wrapper">
            <div class="content">
                <div class="left">
                    <h1>Sign Up to Sign Off</h1>
                    <form name="signoff" action="curlsub.php" method="post">
                        <input id="api" type="hidden" name="API_KEY" value="key">
                    <div class="innerleft">
                        <input id="fname" type="text" name="fname" class="inputs" tabindex="1" /></br />
                        <label for="fname">First</label></br /></br /></br />
                        <input type="text" name="email" class="inputs" tabindex="3" /></br />
                        <label id="email" for="email">Email</label></br /></br /></br />
                        <label for="gender">Gender</label></br /></br />
                        <label for="gender">Age</label></br /></br /></br />
                        <label for="gender">Income</label></br /></br /></br />
                    </div>
                    <div class="innerright">
                        <input id="lname" type="text" name="lname" class="inputs" tabindex="2" /></br />
                        <label for="lname">Last</label></br /></br /></br />
                        <input id="password" type="password" name="password" class="inputs" tabindex="4" /></br />
                        <label for="email">Password</label></br /></br /></br />
                        <input type="radio" name="sex" value="male" selected="selected" tabindex="5" /> Male
                        <input type="radio" name="sex" value="female" tabindex="6" /> Female</br /></br />
                        <select name="age" tabindex="7" >
                            <option value=""></option>
                            <option value="baby">Baby</option>
                            <option value="teen">Teen</option>
                            <option value="young">Young</option>
                            <option value="old">Old</option>
                        </select><br /><br />
                        <select name="income" tabindex="8">
                            <option value=""></option>
                            <option value="none">None</option>
                            <option value="some">Some</option>
                            <option value="okay">Okay</option>
                            <option value="tons">Tons</option>
                        </select><br /><br />
                        <input id="zip" type="text" name="c5" class="zip" tabindex="9" /></br />
                        <label for="c5">Zip Code</label></br /></br />
                        <label for="mformat">Newsletter</label></br /></br />
                        <input type="checkbox" name="mformat" value="html" selected="selected" tabindex="10" /> HTML (iPhone, iPad, Droid)<br /><br />
                        <input type="checkbox" name="mformat" value="text" tabindex="11" /> TEXT (Best for Blackberry)
                    </div>
                    <div class="button"><input type="image" src="button.jpg" name="submit" value="yes"></div>
                    </form>
                </div>
                <div class="right">
                    <img src="logo.jpg" />
                    <p>Updating you on today and prepping you for tomorrow.</p>
                    <a href="http://www.url.com">www.url.com</a>
                </div>
                <div class="clear">
            </div>
            <div class="logged clear">
                <p>Logged in as Some Guy (<a href="#">not you?</a>)</p>
            </div>
        </div></div>
        <div class="footer"></div>
    </div>
    <script>
    $(document).ready(function() {
        //$('div.wrapper').fadeOut(0);
        window.fbAsyncInit = function() {
            FB.init({appId: 'app', status: true, cookie: true});
            FB.Canvas.setSize();
        };
        (function() {
            var e = document.createElement('script'); e.async = true;
            e.src = document.location.protocol +
            '//connect.facebook.net/en_US/all.js';
            document.getElementById('fb-root').appendChild(e);
        }());
    });
    $('#signoff').submit( function() {

        var fname = $("input#fname").val();
        var lname = $("input#fname").val();
        var email = $("input#email").val();
        var password = $("input#password").val();

        var dataString = 'fname='+ fname + '&lame=' + lname + '&email=' + email + '&password=' + password;
        // alert(dataString);
        // return false;

        $.ajax({
        type: "POST",
        url: "curlsub.php",
        data: dataString,
        success: function() {
            //do some stuff
        }
        });
        return false;
    });
    </script> 

</body>
</html>

В настоящее время данные будут успешно отправленыво внешний PHP API, но iframe (или весь мой файл) перезагружается при отправке (и отображает сообщение «success»).

Ответы [ 2 ]

4 голосов
/ 24 ноября 2010

Что вы хотите сделать, это отправить запрос AJAX Post на событие отправки вашей формы. Обратный вызов успеха этого запроса AJAX Post должен обновить ваш пользовательский интерфейс, чтобы предупредить пользователя, что его сообщение было успешным.

$('#signoff').submit(
     //Ajax post request here
     //http://api.jquery.com/jQuery.post/
     return false;  //this stops your page from refreshing
);
1 голос
/ 24 ноября 2010

Вы смотрели на http://api.jquery.com/jQuery.ajax/ или http://api.jquery.com/jQuery.post/

Следующий код должен помочь вам начать работу.

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success
  dataType: dataType
});

Где url - строка, содержащаяURL, на который отправляется запрос.

data - это карта или строка, отправляемая на сервер вместе с запросом.

success - это функция обратного вызова, которая выполняется, еслизапрос успешно выполненОн должен принимать три аргумента: (data, textStatus, XMLHttpRequest)

dataType - это тип данных, ожидаемых от сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...