2012-02-19 13 views
0

私は簡単な電子メールサインアップを構築しようとしています。私はこのチュートリアルを見て、私がやりたかったのと同じように見えました(http://net.tutsplus.com/tutorials/javascript-ajax/a-sleek-ajax-signup-form /)を使用してください。私はプログラミングの知識があまりないので、これは何かを稼働させている最善の策でした。私はチュートリアルに続きましたが、残念ながら、私はそれにいくつか問題があります。"jquery.jsのUncaught SyntaxError:予期しないトークン<"

私の問題は、私は開発ツールでエラーを展開すると、それは示してライン565 に、私は電子メールアドレスを提出しようとしたとき、私はjquery.jsでUncaught SyntaxError: Unexpected token <を得ることです:私として

jQuery.extend.parseJSON    jquery.js:565 
$.ajax.success       common.js:36 
jQuery.Callbacks.fire     jquery.js:1046 
jQuery.Callbacks.self.fireWith   jquery.js:1164 
done         jquery.js:7399 
jQuery.ajaxTransport.send.callback  jquery.js:8180 

を私はこれに新人だから、助けてくれて大変感謝しています。私はしばらくの間研究してきましたが、私と同じ問題は見つかりませんでした。いくつかは似ていましたが、私が遭遇した解決策のどれかで問題を解決できませんでした。

<form id="newsletter-signup" action="?action=signup" method="post"> 
    <fieldset> 
    <label for="signup-email">Sign up for email offers, news & events:</label> 
    <input type="text" name="signup-email" id="signup-email" /> 
    <input type="submit" id="signup-button" value="Sign Me Up!" /> 
    <p id="signup-response"></p> 
</fieldset> 
</form> 

これは、サインアップJSがある:

これは、フォームのコードである

/* SIGNUP */ 
$('#newsletter-signup').submit(function(){ 

    //check the form is not currently submitting 
    if($(this).data('formstatus') !== 'submitting'){ 

     //setup variables 
     var form = $(this), 
      formData = form.serialize(), 
      formUrl = form.attr('action'), 
      formMethod = form.attr('method'), 
      responseMsg = $('#signup-response'); 

     //add status data to form 
     form.data('formstatus','submitting'); 

     //show response message - waiting 
     responseMsg.hide() 
        .addClass('response-waiting') 
        .text('Please Wait...') 
        .fadeIn(200); 

     //send data to server for validation 
     $.ajax({ 
      url: formUrl, 
      type: formMethod, 
      data: formData, 
      success:function(data){ 

       //setup variables 
       var responseData = jQuery.parseJSON(data), 
        klass = ''; 

       //response conditional 
       switch(responseData.status){ 
        case 'error': 
         klass = 'response-error'; 
        break; 
        case 'success': 
         klass = 'response-success'; 
        break; 
       } 

       //show reponse message 
       responseMsg.fadeOut(200,function(){ 
        $(this).removeClass('response-waiting') 
          .addClass(klass) 
          .text(responseData.message) 
          .fadeIn(200,function(){ 
           //set timeout to hide response message 
           setTimeout(function(){ 
            responseMsg.fadeOut(200,function(){ 
             $(this).removeClass(klass); 
             form.data('formstatus','idle'); 
            }); 
           },3000) 
          }); 
       }); 
      } 
     }); 
    } 

    //prevent form from submitting 
    return false; 
}); 

そして、これはPHPです:

<?php 
//email signup ajax call 
if($_GET['action'] == 'signup'){ 

mysql_connect('host','user','password'); 
mysql_select_db('table'); 

//sanitize data 
$email = mysql_real_escape_string($_POST['signup-email']); 

//validate email address - check if input was empty 
if(empty($email)){ 
    $status = "error"; 
    $message = "You did not enter an email address!"; 
} 
else if(!preg_match('/^[^\W][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\.[a-zA-Z]{2,4}$/', $email)){ //validate email address - check if is a valid email address 
     $status = "error"; 
     $message = "You have entered an invalid email address!"; 
} 
else { 
    $existingSignup = mysql_query("SELECT * FROM signups WHERE signup_email_address='$email'"); 
    if(mysql_num_rows($existingSignup) < 1){ 

     $date = date('Y-m-d'); 
     $time = date('H:i:s'); 

     $insertSignup = mysql_query("INSERT INTO signups (signup_email_address, signup_date, signup_time) VALUES ('$email','$date','$time')"); 
     if($insertSignup){ //if insert is successful 
      $status = "success"; 
      $message = "You have been signed up!"; 
     } 
     else { //if insert fails 
      $status = "error"; 
      $message = "Ooops, Theres been a technical error!"; 
     } 
    } 
    else { //if already signed up 
     $status = "error"; 
     $message = "This email address has already been registered!"; 
    } 
} 

//return json response 
$data = array(
    'status' => $status, 
    'message' => $message 
); 

echo json_encode($data); 
exit; 
} 
?> 

ありがとう!

更新:Shad - 「success:function(data){」の直後にそのコードを挿入しました。そのエラーと開発ツールの

Failed: 
SyntaxError 
arguments: Array[1] 
get message: function getter() { [native code] } 
get stack: function getter() { [native code] } 
set message: function setter() { [native code] } 
set stack: function setter() { [native code] } 
type: "unexpected_token" 
__proto__: Error 
<br /> 
<b>Warning</b>: mysql_num_rows(): supplied argument is not a valid MySQL result resource in <b>/homepages/37/d403623864/htdocs/_php/launch_notify.php</b> on line <b>22</b><br /> 
{"status":"error","message":"Ooops, Theres been a technical error!"} 

スクリーンショット:メールアドレスを提出しようとするとことをやった後、私は新しく追加されたコードの行を指して、コンソールでこれを取得します。あなたがラインの任意の拡大か何か見るために必要がある場合、私に教えてください:http://i.stack.imgur.com/IwnBr.png

UPDATE#2:聡によって提供されたコードを使用して、私は問題を考え出すにはほとんど進展したと思うが、それでもIそれを解決していない。私はそれをMySQL接続の問題に絞り込んだと思う。私はこのコードを試してみました:

<?php 
mysql_connect("[DB]","[USER]","[PASS]") 
or die(mysql_error()); 
echo "Connected to MySQL<br />"; 
mysql_select_db("signups") 
or die(mysql_error()); 
echo "Connected to Database"; 
?> 

をそして私が得る応答は次のとおりです。

Connected to MySQL 
Access denied for user '[USER]'@'%' to database 'signups' 

私は物事の束を試みたが、それを把握することはできません。私のホストは1 & 1で、そこにPHPMyAdminを使ってテーブルを作成しました。私は別のテーブルを試しましたが、すべて同じ問題を抱えています。ここにPHPMyAdminのテーブルを示すスクリーンショットがあります:http://i.stack.imgur.com/Oe0Fm.png

もう一度、すべての助けを借りてありがとう。それは有り難いです。

+0

PHPページの応答はどのように見えますか? –

+0

最初に私がお勧めするのは、エラーをキャッチすることです=)(便利な方法で:) 'try {responseData = jQuery.parseJSON(data)} catch {e} {console.log( 'Failed:'、e、data) ;} ' – Shad

+0

Shad - 元の投稿を更新しました。ありがとう。 – user1218743

答えて

0

$existingSignupが有効なリソースではないため、PHPファイルが警告されています。これは、SQLクエリが無効であるためです。このため、PHPは予期せぬものを出力しているため、ページは有効なJSON応答を返しません。

あなたmysql_query(...)呼び出しはこのように、mysql_num_rows(...)を呼び出す前に、有効なリソースを返すことを確認してください:

$existingSignup = mysql_query("SELECT * FROM signups WHERE signup_email_address='$email'"); 
if($existingSignup !== FALSE) 
{ 
    if(mysql_num_rows($existingSignup) < 1){ 
     // ... 
    } 
    else { //if already signed up 
     $status = "error"; 
     $message = "This email address has already been registered!"; 
    } 
} 
else { 
    $status = "error"; 
    $message = mysql_error(); 
} 

編集:クエリは文法的に正しいことを注意してください、私はあなたがなかったので、あなたが問題に直面していると思いますDBテーブルを正しく設定してください。

+0

助けてくれてありがとう。これに対応して元の投稿を更新しました。 – user1218743

関連する問題