2011-07-11 58 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設置與彼此不同,我該怎麼辦?找到它們是如何在源代碼中生成的?我可以找到嗎? –