Отправка формы ajax с php - PullRequest
3 голосов
/ 12 июля 2011

Я создаю программу php, чтобы получить 3 переменные с веб-сайта и вычислить их, а затем опубликовать результат, я могу прочитать переменные, рассчитать их, но часть публикации трудна для меня, потому что она использует форму Ajax (Я думаю) возможно ли размещение с php с использованием XMLhttprequest?

это кнопка отправки:

<a href="#" class="formSubmit" tabindex="3">

это окно сообщения:

<textarea name="message" id="messageContent" rows="18" wrap="virtual" tabindex="2"></textarea>

Я пытался обработать его как обычную форму, но это не такне работает, я выследил функцию ajax, чтобы отправить:

function formSubmitFunction(e,action, target){
    e.stopPropagation();
    e.preventDefault();
    if ($("#messageContent").attr("value") == undefined || $("#messageContent").attr("value").length < 2){
        alert("A mensagem precisa ter no mínimo 2 caracteres.");
        $("#messageContent").focus();
        return false;
    }else {
        $("#formSubmit").html('<img src="http://website.com/'+desTheme+'/images/send_post.gif');
        if(action == "post"){
            $("#formAjax").append('<div id="carregando"></div>');
            PostFunctions.insertPost(topicId,$("#messageContent").val(), callbackInsertPost);
        } else {
            var postId = target.replace("#","");
            $("#formAjax").append('<div id="carregando"></div>');           
            PostFunctions.editPost(postId,$("#messageContent").val(), callbackEditPost);
        }
        return false;
    }
}

help

@ edit:

нашел другую функцию insertPost

function callbackInsertPost(response){
        var result = eval("("+response+")");
        if($("#popup").length){
            $("#popup").remove();
        }
        if(!result.error){
            var returnMessage = "";
            if(result.isForumModerated){
                returnMessage = '<div id="popup" class="autoClear simple">'
                                    +'Sua mensagem está aguardando a aprovação da moderação.'
                                    +'</div>';
                $("#carregando").remove();
                $(actualPostId).prepend(returnMessage);
                window.setTimeout(function(){
                    $("#popup").fadeOut("slow", function(){
                        $("#popup").remove();
                    });
                },5000);
            $("#formAjax").remove();
            } else {
                //console.log(result);
                window.setTimeout(function(){
                    document.location = "_t_lastpost_"+topicId+"_"+forumId+"?postId="+result.postId;
                },1500);
                /*returnMessage = '<div id="popup" class="autoClear simple">'
                                    +'Mensagem enviada com sucesso! Clique neste <a href="_t_lastpost_'+topicId+'_'+forumId+'">link</a> para ver sua mensagem'
                                    +'</div>';*/
            }
        } else {
            if(result.nickname_reproved){
                document.location = "changenickname.jbb";
            } else {
                $("#carregando").remove();
                for(i = 0; i < result.messages.length; i++){
                    $("#formAjax").prepend('<div id="popup" class="autoClear error-post">'
                                        +result.messages[i]+'<br/>'
                                        +'</div>'); 
                    }
                $.scrollTo("#popup",500);
                $("#formSubmit").html('<a href="#" class="formSubmit" tabindex="3"><img src="'+baseImages+'/themes/'+desTheme+'/images/pm_send.gif"/></a>');
                $(".formSubmit").bind("click",function(e){
                    formSubmitFunction(e,"post")
                });
            }
        }
}

@ edit2:

PostFunctions.insertPost = function(p0, p1, callback) {
    DWREngine._execute(PostFunctions._path, 'PostFunctions', 'insertPost', p0, p1, callback);
}

1 Ответ

0 голосов
/ 12 июля 2011

Забудьте все вещи JavaScript, которые вы просматриваете.При эмуляции браузера вам просто нужно заново создать запросы, отправленные на сервер.

  1. Откройте сетевую панель fiddler или firebug.
  2. Сделайте запись в вашем браузере.
  3. Найдите сообщение ajax в fiddler / firebug.
  4. Создайте обычное сообщение, используя PHP curl, используя те же параметры, которые вы видели в fiddler.

Убедитесь, что выпроверьте заголовки в случае, если javascript установил несколько файлов cookie.

РЕДАКТИРОВАТЬ

  • Файл cookie Он создается curl и имеет другой формат, чем fiddler,Удалите его и дайте curl создать его.

  • Является ли c0-id скрытым полем формы?Просмотреть исходный код.Если он меняется, когда вы смотрите на него в другом браузере, вам нужно почистить форму, а затем сделать пост, который вы написали, основываясь на этом значении.

    • Разместить на странице, где отображается форма.Используйте CURL_OPT_COOKIEJAR.

    • CURL_OPT_COOKIEJAR. Это полезно, если вы публикуете на двух разных страницах, потому что он запоминает файлы cookie, установленные из последнего запроса, как браузер.

  • Убедитесь, что ваш пользовательский агент является настоящим браузером.

  • Смотрите, как браузер и ваш скрипт попадают на сервер через фиддлер.Вы хотите, чтобы ваш скрипт вел себя точно так же, как браузер.Так что продолжайте настраивать свой сценарий, чтобы сделать его ближе.В конце концов это сработает.

  • Очистка веб-сайтов может поначалу быть очень неприятной и занимать много времени.Просто продолжай.

    • Организуйте свой код в функции и классы.Так будет проще делать несколько сообщений.
...