2011-09-16 17 views
6

エラーで捕捉されていないポスト関数があります。Jquery Ajaxポスト成功/エラー関数

ここには、postride.phpから返される値があります。

if ($group_id==0) { 
echo 'No group selected'; 
return false; 
exit; 
} 

ここでjQueryのコードは次のとおり

$(document).ready(function(){ 
$('#postride').submit(function(event) { 
    event.preventDefault(); 
    dataString = $("#postride").serialize(); 
    $.ajax({ 
     type: "post", 
     url: "postride.php", 
     data:dataString, 
     error: function(returnval) { 
      $(".message").text(returnval + " failure"); 
      $(".message").fadeIn("slow"); 
      $(".message").delay(2000).fadeOut(1000); 
     }, 
     success: function (returnval) { 
      $(".message").text(returnval + " success"); 
      $(".message").fadeIn("slow"); 
      $(".message").delay(2000).fadeOut(1000);  
      //setTimeout(function() { top.location.href="view.php" }, 3000); 
     } 
    }) 
    return false; 
}); 

は})。

ポスト関数はfalseを返しますが、エラー関数は発生せず、成功関数のみを返します。それは "No group selected success"と表示されます。

ありがとうございました!

答えて

21

jQueryのajaxメソッドのエラーオプションは、接続不良、タイムアウト、無効なURL、その性質のものによるエラーです。あなたが考えているのは、間違いではありません。

このようなものは何ほとんどの人がそうである

...

PHP

$(document).ready(function(){ 
$('#postride').submit(function(event) { 
    event.preventDefault(); 
    dataString = $("#postride").serialize(); 
    $.ajax({ 
     type: "post", 
     url: "postride.php", 
     dataType:"json", 
     data: dataString, 
     success: function (response) { 
      if(response.status === "success") { 
       // do something with response.message or whatever other data on success 
      } else if(response.status === "error") { 
       // do something with response.message or whatever other data on error 
      } 
     } 
    }) 
    return false; 
}); 
+0

を明確にするためにどうもありがとうございます! – Matt

+0

よろしくお願いします。Matt –

+0

Nice、@AnthonyJack!しかし、私はあなたがjavascriptコードで 'dataType: 'json'を意味すると思います... – Simon

0

jQueryのajaxメソッドのメソッドは、要求されたページがエラーステータスコードを返すときにのみ呼び出されます。あなたの例ではおそらくHTTP 200が返されるので、successが呼び出されます。 jQueryは応答の内容を調べて、それが成功したかどうかを判断しません。

が0の場合は、echoコールをheaderに置き換えて、4xx status codeを設定する必要があります。

2

wsanvilleが正しいのjavascript

if ($group_id == 0) { 
echo json_encode(array(
    'status' => 'error', 
    'message'=> 'error message' 
)); 
} 
else 
{ 
echo json_encode(array(
    'status' => 'success', 
    'message'=> 'success message' 
)); 
} 

: "成功" か "失敗" ajaxリクエストの成功/失敗を示します。

しかし、HTTPヘッダーを変更するのではなく、jsonレスポンスで情報を返すと便利です。

$error = false; 
if ($group_id==0) { 
    $error = 'No group selected'; 
} 
$response = array('error'=>$error); 
echo json_encode($response); 

そして、JSの「成功」コールバックで、私はこれを行うだろう:だから、例えば、私はそうのような対応postride.phpだろう

success: function (returnval) { 
    if (returnval.error) { 
     $(".message").text(returnval + " failure") 
     .fadeIn("slow",function(){ 
      $(this).delay(2000).fadeOut(1000); 
     }); 
    } else { 
     //do whatever user should see for succcess 
    } 
+0

Anthony Jackは、私が最初に言っていたことをかなり投稿した - あなたが私の答えをupvoteすれば、彼をupvoteし、 –

関連する問題