2013-08-16 75 views
2

我不能爲我的生活弄清楚這裏發生了什麼。我會打開一個不同的瀏覽器來檢查我是否改變了作品,也許我的其他瀏覽器緩存了一些東西,它會起作用!但是,我再次這樣做,似乎並沒有。我要瘋了。AJAX不會觸發PHP腳本

在我的網站syllableapp.com上,我創建了一個可連接到的MySQL數據庫。我做了一個連接到它的PHP腳本,添加了一個簡單的條目,並完成。它被稱爲register_email.php,它可以訪問here。通過該URL手動訪問它將添加條目。其代碼如下:

<?php 
    $db = new mysqli("localhost", "username", "password", "table"); 

    if ($db->connect_error) { 
     echo "Could not connect to database."; 
     exit; 
    } 
    else { 
     $db->query("INSERT INTO emails (email) VALUES ('weird')"); 
     echo 1; 
    } 
?> 

如果我檢查,它會被添加。

但是,我希望它從表單中添加。我在http://syllableapp.com/test/index.html一個HTML文件,看起來像這樣:

<html> 
    <head> 
     <title>Syllable - iPhone Speed Reader</title> 

     <link rel="stylesheet" href="styles/style.css"> 

     <script type="text/javascript" src="scripts/jquery-1.8.1.min.js"></script> 
     <script type="text/javascript" src="scripts/scripts.js"></script> 
     <script type="text/javascript" src="scripts/jquery-ui-1.8.23.min.js"></script> 
    </head> 
    <body> 
     <div class="content"> 
      <img src="images/app-icon.png" alt="App icon"> 

      <h1>Syllable</h1> 
      <p>Speed reading app for iPhone. Devour all your Instapaper and Pocket articles, and learn to read much faster in the process.</p> 

      <form method="post" action=""> 
       <input type="email" class="email" placeholder="Email me when it's live"> 
       <input type="submit" class="submit" value="Send"> 
      </form> 

      <a href="http://twitter.com/syllableapp"></a> 
     </div> 
    </body> 
</html> 

因此,當用戶提交表單,我掛在頂部攔截提交按鈕按下的JavaScript文件,並調用一個AJAX功能提交到PHP表單。 jQuery的的,看起來像:

$(document).ready(function() { 
    $('input[type="submit"]').click(function() { 
     var email = $.trim($('.email').val()); 
     var emailRegEx = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 


     if (email == "" || !emailRegEx.test(email)) { 
      event.preventDefault(); 
      $(this).effect("shake", { times:2 }, 75); 
     } 
     else { 
      $.ajax({ 
       type: "POST", 
       url: "http://syllableapp.com/test/register_email.php", 
       data: { "message": "hi" }, 
       success: function(data) { 
        alert("success"); 
       }, 
       error: function(jqXHR, textStatus, errorThrown) { 
        alert("failure"); 
       } 
      }); 

     } 
    }); 
}); 

這基本上只檢查它是否是一個有效的電子郵件地址,然後如果是這樣,調用PHP文件。

但是,每次我點擊提交,它說失敗。這究竟爲何發生?爲什麼我可以直接訪問它,但它不會讓我使用AJAX?

+0

你有任何的PHP日誌? – Lance

+0

請原諒我的無知,但我該如何抓住這些? –

+0

查找名爲error_log的文件,您是否曾嘗試在anon click函數的開頭添加e.preventDefault()?並傳遞給函數。 –

回答

0

只是一個猜測,但在你的AJAX塊中的URL行改成這樣:

url: "register_email.php", 

此外,作爲測試,

(1)在AJAX成功的功能更改警報命令:

alert(data); 

和(2)插入該行立即在文件 「register_email.php」 的<?php指令下列:

die('Made it to here'); 
+0

已更改。 syllableapp.com/test它仍然顯示失敗 –

+0

好吧,在register_email.php頂部die()消息怎麼樣?這會告訴你你的ajax是否在溝通。 – gibberish

+0

沒有顯示出我的知識。在那。 –

0

有幾件事情:

1)你是表單需要一個動作,否則這不是正確的HTML。您可以將它設置爲像「#」那樣的值

2)當您單擊提交按鈕時,您希望使用自定義ajax提交表單,而不是通過標準方式提交。您的單擊事件處理程序的AJAX應該是這樣的:

$('input[type="submit"]').click(function(event) { 
event.preventDefault(); 
//... 
}); 

你有event.preventDefault在你的代碼,但該事件變量沒有被傳遞給函數。我想你每次都需要調用event.preventDefault,而不僅僅是輸入驗證失敗。

3)不要使用警報,請嘗試使用console.log並監控您的javascript控制檯以查看是否有任何錯誤。將這些錯誤添加到您的問題中,以幫助我們解決您的問題。

+0

我將其更改爲:https://gist.github.com/anonymous/e67595f2a98075b978a8 –

+0

我現在得到這個錯誤時,我警告這兩個錯誤(在現在更改爲console.log過程中)'parsererror SyntaxError:JSON解析錯誤:意外標識符「Made' –

+0

啊,我相信我有」死「消息仍然在那裏一秒 –