2012-04-22 22 views
15

jQueryの$.ajax機能を使用してフォームを送信しても動作しますが、成功は私が問題を抱えている場所です。ここに私のコードは次のとおりです。jQuery AJAX成功

$("#form").submit(function() { 
     $.ajax({ 
      type: "POST", 
      url: '/login/spam', 
      data: formData, 
      success: function (dataCheck) { 
       if (dataCheck == 'value') { 
        //Do stuff 
       } 
      } 
     }); 
     return false; 
    }); 

私がいる問題はif機能がdataCheckがに等しくないことを言い続けています。 return false;を削除すると、ページがの値と予想通りに表示されるため、そのことがわかります。また、以前はほぼ同じコードを使っていましたが、これはうまくいきます。誰か助けてくれますか?

+0

あなたはその質問を編集しましたか? '' 749afa42e6621f10bae17ee00cb1f4de''で何が間違っていたのですか? – gdoron

+0

簡単にするために、私は推測します。 – neex1233

答えて

19

自分で答えを見つける方法:

サーバーからの入手方法を確認するためのデバッグコードを入力します。

$("#form").submit(function() { 
     $.ajax({ 
      type: "POST", 
      url: '/login/spam', 
      data: formData, 
      success: function (dataCheck) { 
       console.log(dataCheck); // <============================== 
       if (dataCheck == 'value') { 
        //Do stuff 
       } 
      } 
     }); 
     return false; 
    }); 

これはおそらく他の形式のものです。

+0

さて、これを試してみましょう。 – neex1233

+2

上記のスクリプトにエラーがある場合はfalseを返すfalse falseを返します。 preventDefaultは行います。だから私はそれ以上の偽を好む。 http://stackoverflow.com/a/4771084/40521 – Shyju

+0

jQueryは、レスポンスのMIMEタイプに基づいて結果のデータ型を(指定していないので)推測しようとします。タイプによって評価が異なる場合があります。 –

2

デフォルトの動作(この場合は通常のフォーム送信)を防ぐには、preventDefaultreturn false以上に設定します。 preventDefaultは、上記のスクリプトに問題がある場合でも、falseを返します。

以下のコードは正常に動作するはずです。

$("#form").submit(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     type: "POST", 
     url: '/login/spam', 
     data: formData, 
     success: function (dataCheck) { 
      if (dataCheck == 'value') { 
       //Do stuff 
      } 
     } 
    });  
}); 

gdoronが説明したように、console.debug/alertを使用して変数にどの値が含まれているかを確認します。 Firebug Netタブ/フィドラーを使用すると、サーバー・ページからどのような応答が得られているかを理解するのに役立ちます。

0

これは変です。私のアドバイスは、xhrの応答を見るためにFireWireをFireWireなどで使用することです(例えば、chromeのツールを開発するなど)。

誤ったタイプのxhr応答(たとえば、 '749afa42e6621f10bae17ee00cb1f4de' htmlタグのエンベロープ)やトリミングされていないスペースが原因で間違った結果が発生した可能性があります。あなたを助ける:)

0

私はそれはしかし、私は今日、この同じ問題を後半に持っていたかもしれないとの問題は、正しい文字列がしかし、それは余分な改行を持っていたいくつかの理由で、成功に返されたことだった知って

月文字の前にローカルではこれは起こりませんでしたが、私がオンラインにしたときに、改行が常に返される文字列に追加されました(あなたのケースではdataCheck)。私は最後に改行を取り除くためにsubstr()関数を使いました。そこからはうまくいきました。

+1

これは推測のように見え、実際には問題の論理的解決につながる可能性のある事実を与えていない –

0

(response.indexOf( "成功")!= - 1)場合は{}このメソッドのindexOf(み)

0

私はdataCheck文字列であることを推測します。str1str2後にソートされている場合2つの文字列が

  • 返し等しい場合STR1がstr2
  • 返し前にソートされている場合次にlocaleCompare()

    if (dataCheck.localeCompare('value') == 0) { 
        //Do stuff 
    } 
    
    • 返し-1を使用
  • +0

    テキストの書式設定に感謝 –