2010-09-22 106 views
0

我正在使用php/ajax提交沒有頁面刷新的表單。這裏是我的文件 -從遠程php腳本返回數據

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腳本成功返回? 任何想法如何調試這個。我曾嘗試在coupon.js結束時使用return false,但沒有結果。

當我點擊提交螢火給出以下結果 -

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 
+2

出於好奇,unset($ _POST)有什麼意義;'? – 2010-09-22 21:01:55

+0

取消設置'$ _POST'只會使(a)請求花費很長時間,(b)'$ _POST'數組非常龐大,(c)即使這樣,它也不是微型優化和/或這不應該在HTTP請求中處理。 – Wrikken 2010-09-22 22:45:21

回答

1

@Fanis無論他使用'$'還是'jQuery',它們都是同義詞。

@Ayush 正如Fanis所說,如果您不使用它,您應該試試Firebug。 我在我的服務器上檢查過這個例子,確定,但我不知道 你身邊有什麼問題。

可以使用的onsubmit = 「返回false」 禁用表單提交:

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

另外檢查是否啓用了JavaScript,比如做 「警報( '東西')」 在$(文件)。準備

編輯:

// 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 
+0

我在文檔準備好以及表單提交之後向兩個地方添加了警報,並且它們工作正常。但是現在當我點擊提交時,沒有任何事情正在發生。沒有頁面重定向和消息顯示。 – ayush 2010-09-22 22:12:17

+0

如果執行了Ajax請求,檢查Firebug(如果有的話,它將在Firebug Console選項卡中顯示) – 2010-09-22 22:23:26

+0

感謝您的澄清,Michal。 Javascript,甚至jQuery,都不是我的強項,只看過使用的簡寫版本,我認爲它是唯一的。 – Fanis 2010-09-22 22:46:25

1

如果你被重定向到sms.php而不是做一個Ajax調用,這可能意味着有什麼東西您的jQuery代碼錯誤,可能是事件綁定本身。

我不知道沒有測試它,但不應該代碼是:

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

檢查Firefox控制檯,無論是在Firefox/Firebug或Chrome-IE /開發人員工具。它是否顯示這些行中的任何錯誤?

+0

請參閱我編輯的問題螢火蟲結果 – ayush 2010-09-23 06:25:12

+0

@ayush,你是否得到404上加載jquery.min.js?如果是的話,那麼jquery將不會被加載。查看Firebug中的控制檯選項卡。它會告訴你任何的javascript錯誤,包括如果你試圖調用一個沒有實際加載jQuery的jQuery函數。 – Fanis 2010-09-23 07:21:28

+1

我認爲它顯示404沒有在sms.php上找到。當我點擊**'jquery.min.js(第130行)'**時,它會顯示我第130行的jquery腳本。 – ayush 2010-09-23 07:30:59

1

FanisMichal Kluczka可能是正確的關於與事件結合的問題,我想你自己的代碼,以及,它爲我工作。

alert('X')作爲jQuery(document).ready()jQuery(".appnitro").submit()函數中的第一個語句,看看是否顯示了這兩個語句(第一個是文檔加載時,第二個是表單提交時)。

一兩件事:我建議你包括

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

到您sms.php文件打印您的JSON數據,以防止跨站點腳本(XSS)攻擊之前。有關詳細信息,另請參閱Don’t serve JSON as text/html

+0

的編輯問題,請檢查編輯過的螢火蟲結果。 – ayush 2010-09-23 06:19:54

+0

你是否包含'alert()'調用?加載頁面或提交表單時是否顯示任何消息?這肯定會幫助你追蹤錯誤的來源。正如我之前所說的,你的代碼**確實**適用於我。您報告的Firebug'Not Found'錯誤對我來說似乎很奇怪,因爲直接打開URL顯然是有效的,就像您在提交表單時一樣(您提交時仍然看到JSON數據,是不是?)。 – Archimedix 2010-09-24 11:04:21