возвращение данных из удаленного скрипта php - PullRequest
0 голосов
/ 23 сентября 2010

Я использую php / ajax для отправки формы без обновления страницы.Вот мои файлы -

coupon.js

jQuery(document).ready(function(){
        jQuery(".appnitro").submit( function(e) {
$.ajax({
            url     : "sms.php",
            type    : "post",
            dataType: "json",
            data    : $(this).serialize(),
            success : function( data ) {
                        for(var id in data) {
                            jQuery('#' + id).html( data[id] );
                        }
                      }

        });
//return false or
e.preventDefault();

    });

});

sms.php

    <?php
    //process form
$res = "Message successfully delivered";
    $arr = array( 'mess' => $res );
    echo json_encode( $arr );//end sms processing
    unset ($_POST);
    ?>

и вот код для моей html-страницы -

<form id="smsform" class="appnitro" action="sms.php" method="post">
...
</form>
<div id="mess" style="background:green;"></div>

Теперь вместо отправки формы через ajax без обновления страницы происходит перенаправление страницы на

baseurl/sms.php, и единственное, что видно на странице, это

{"mess":"Message successfully delivered"}

Я предполагаю, что php-скрипт не возвращается обратно в jquery, и, следовательно, отображается эхо в последней части sms.php. Как я должен заставить php-скрипт успешно возвращаться?ЛЮБЫЕ ИДЕИ КАК ОТЛАДАТЬ ЭТО.Я ПЫТАЛСЯ ИСПОЛЬЗОВАТЬ return false в конце coupon.js, но безрезультатно.

Когда я нажимаю на Отправить, Firebug дает следующие результаты -

POST http://174.132.194.155/~kunal17/devbuzzr/wp-content/themes/street/sms.php

404 Not Found 1.29s   `jquery.min.js (line 130)`

Ответ

Firebug needs to POST to the server to get this information for url:
http://174.132.194.155/~kunal17/devbuzzr/wp-content/themes/street/sms.php

This second POST can interfere with some sites. If you want to send the POST again, open a new tab in Firefox, use URL 'about:config', set boolean value 'extensions.firebug.allowDoublePost' to true
This value is reset every time you restart Firefox This problem will disappear when https://bugzilla.mozilla.org/show_bug.cgi?id=430155 is shipped

Ответы [ 3 ]

1 голос
/ 23 сентября 2010

@ Fanis Не имеет значения, использует ли он '$' или 'jQuery', они являются синонимами.

@ Аюш Как говорит Фанис, вам следует попробовать Firebug, если вы его еще не используете.Я проверил пример на своем сервере, работает нормально, и я не знаю, в чем проблема с вашей стороны.

Вы можете использовать onsubmit = "return false", чтобы отключить отправку формы:

<form id="..." class="..." ... onsubmit="return false">

Также проверьте, включен ли javascript, например, сделайте «alert (« что-то »)» в $ (document) .ready

Редактировать:

// instead of  
url: "sms.php"
// try
url: "/~kunal17/devbuzzr/wp-content/themes/street/sms.php"
// although I don't really know if it will help
1 голос
/ 23 сентября 2010

Фанис и Михал Ключка , вероятно, правы по поводу проблемы с привязкой событий, я тоже попробовал ваш код, и он работает для меня.

Положитеalert('X') как первые операторы в ваших jQuery(document).ready() и jQuery(".appnitro").submit() функциях и посмотрите, отображаются ли оба (первый при загрузке документа, второй при отправке формы).

Еще одна вещь: я предлагаювы включаете

header('Content-Type: application/json');

в файл sms.php перед печатью данных JSON для защиты от атак с использованием межсайтовых сценариев (XSS).См. Также Не используйте JSON в качестве текста / html для получения подробной информации.

1 голос
/ 23 сентября 2010

Если вы перенаправляетесь на sms.php вместо выполнения вызова ajax, это, вероятно, означает, что с вашим кодом jQuery что-то не так, возможно, сама привязка события.проверять его, но не должен ли этот код быть:

$(document).ready(function(){
        $(".appnitro").submit( function(e) {
$.ajax({
...

?

Проверьте консоль javascript в Firefox / Firebug или Chrome-IE / Developer Tools.Есть ли какие-либо ошибки в этих строках?

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