2016-08-09 19 views
0

下の例では、私のAjaxレスポンスは「成功」[型は文字列]となり、「成功」[型は文字列]を比較しています。次に、コントロールがif条件に入っていないのはなぜですか?文字列とのAjaxレスポンスの比較

$.ajax({ 
     url: "controller.php", 
     method: "POST", 
     data: { loginData : $("#loginForm").serialize()}, 
     dataType: "text", 
     success: function (response) { 
      if(response=='success') // response coming as is 'success' 
      { 
       window.open('www.google.com'); 
      } 
     }, 
     error: function (request, status, error) { 
      /* error handling code*/ 
     } 
}); 
+1

「応答」の価値はどのように分かりますか? –

+0

成功またはエラーを判断するために実際の応答ステータスを使用してみませんか?あなたは成功のために空の200レスポンスを返すだけで、実際にレスポンスボディを比較するのは気にならないかもしれません。 – Phil

+0

'console.log(エスケープ(レスポンス));'それは単語 – epascarello

答えて

1

データをプレーンテキストとして渡しています。私はJSONとしてデータを渡すことを推奨します。なぜなら、サーバーからの応答を取得する方が簡単だからです。

また、より多くの変数(フォーム入力)を含む変数をdata: { loginData : $("#loginForm").serialize()}に使用しています。 .serializeArray()を使用して、サーバースクリプトで捕捉できるJSON変数としてデータを送信することをお勧めします。

ので:

$.ajax({ 
    url: "controller.php", 
    method: "POST", 
    data: $("#loginForm").serializeArray(), 
    dataType: "json", 
    success: function (response) { 
    if(response["success"]) { 
     window.open('www.google.com'); 
    } 
    }, 
    error: function (request, status, error) { 
    // error handling code 
    } 
}); 

そしてcontroller.phpに:(あなたは、配列を使用しているというだけの理由)も

<?php 
if(isset($_POST['input'])) { // use your input's name instead 
    $response['success'] = true; 
} else { 
    $response['success'] = false; 
} 

header('Content-Type: application/javascript'); 
echo json_encode($response); 
?> 

そして、この最後のコードスニペットを使用すると、 "成功" 以上のものを渡すことができます。例:

<?php 
if(isset($_POST['input'])) { // use your input's name instead 
    $response['success'] = true; 
    $response['open'] = 'www.google.com'; 
} else { 
    $response['success'] = false; 
} 

header('Content-Type: application/javascript'); 
echo json_encode($response); 
?> 
+0

のOPには特別な 'dataType: "" ** HTMLではない** * HTMLテキスト* – Phil

+0

@Phil編集、ありがとう:) – ElcompJR