2011-07-11 61 views
3

我正在构建一个php程序,从网站获得3个变量并计算它们,然后发布结果,我可以读取变量,计算它们,但发布部分对我来说很困难,因为它使用Ajax表单(我认为)可以使用XMLhttprequest使用php进行发布?用php提交一个ajax表格

这是提交按钮:

<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; 
    } 
} 

帮助

@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); 
} 
+0

它看起来像你使用jQuery,但实际的'POST'功能都位于'PostFunctions'对象。您需要显示该部分的代码并解释问题的具体内容。 – jeroen

+0

发现它,在主帖子上编辑,问题是:由于提交按钮使用ajax,我无法使用curl发布新消息,我可以使用PHP吗? –

+0

@AndréCardoso,你绝对可以使用cURL。 AJAX没什么特别的......它只是普通的HTTP,就像其他任何东西一样。 – Brad

回答

0

忘记你正在看的JavaScript的东西。模拟浏览器时,您只需重新创建发送到服务器的请求。

  1. 打开提琴手或萤火虫的网面板。
  2. 在您的浏览器中进行操作。
  3. 寻找在提琴手/萤火虫ajax职位。
  4. 创建一个使用PHP卷曲的常规文章,使用您在小提琴手中看到的相同参数 。

确保在javascript设置了一些cookie的情况下检查标头。

编辑

  • cookie文件中它是由卷曲创建具有比提琴手不同的格式。删除它并让curl创建它。

  • c0-id隐藏表单字段?查看源代码。如果它在另一个浏览器中查看时发生变化,则需要刮掉表单,然后根据该值进行写入的文章。

    • 发布到显示表单的页面。使用CURL_OPT_COOKIEJAR

    • CURL_OPT_COOKIEJAR如果您发布到两个不同的页面,它会很有用,因为它记住了从上次请求中设置的Cookie,就像浏览器一样。

  • 确保您的用户代理是一个真正的浏览器。

  • 观看浏览器和您的脚本通过提琴手击中服务器。您希望脚本的行为与浏览器完全相同。所以请继续调整脚本以使其更接近。最终它会起作用。

  • 首先,刮蹭网站可能非常令人沮丧且费时。只要坚持下去。

    • 将代码组织到函数和类中。这样做多个帖子会更容易。
+0

: callCount = 1 C0-SCRIPTNAME = PostFunctions C0-方法名= insertPost C0-ID = 6001_1310347486332 C0-参数0 =编号:1576140 c0-param1 = string:fiddler%20hehe%20haha%20searchme xml = true 我会尝试,但JavaScript确实设置了一些cookie,我应该如何处理它们? –

+0

你将不得不自己设置它们。看卷发曲奇处理。并查看这篇文章,我在这里http://stackoverflow.com/questions/3622596/how-do-i-inject-cookies-when-using-a-cookie-jar-in-curl –

+0

谢谢,但一个问题:我发布两次,Cookie设置与彼此不同,我该怎么办?找到它们是如何在源代码中生成的?我可以找到吗? –