32

非常に単純な jQuery Ajax 呼び出しがあります (以下)。Ajax 呼び出しが実行され、Firebug Net パネルで、サーバーが 200 OK を返し、文字列 "OK" が返されたことを確認できます。ただし、done 関数と fail 関数は起動しません。非常にイライラします!

(「前」と「後」のアラートは発生します。)

簡単にするために (およびデバッグ手法として)、これを最もむき出しのスケルトンにまで落としましたが、それでもハンドラーは起動しません。ここには何が表示されていませんか?

postUrl= "/mod/users/check_email/";
dataToPost= { email: "test@not.me" };

alert("before");
$.ajax
({
    type: "POST", 
    url: postUrl,
    data: dataToPost,
    done: function() 
    {
        alert("Success.");
    },
    fail: function() 
    {
        alert("Sorry. Server unavailable. ");
    },
});  // end Ajax call 

alert("after");
4

5 に答える 5

55

done()関数と関数をチェーンする必要がありfail()ます。これらは、で使用されるオプション オブジェクトの一部ではありません$.ajax

$.ajax({
    type: "POST", 
    url : postUrl,
    data: dataToPost
}).done(function()  {
    alert("Success.");
}).fail(function()  {
    alert("Sorry. Server unavailable. ");
}); 

また、ajax は非同期であるため、「成功」アラートの前に「後」アラートが表示されても驚かないでください。

于 2013-05-24T21:46:45.717 に答える
13

また、設定する必要がありますdataType: 'json'。に設定すると、この問題が発生し、メソッド'string'が起動しません。done

于 2015-09-15T08:13:59.867 に答える
2

async リクエストを同期的に送信する必要がある場合は、false に設定します。デフォルトは true です。このオプションを false に設定すると、リクエストは、レスポンスが受信されるまで他のコードの実行をブロックすることに注意してください。

dataType サーバーから返されると予想されるデータのタイプ。デフォルトでは、dataType が指定されていない場合、jQuery は応答の MIME タイプを調べます。

存在する場合は削除 dataType: 'json'します。

async:false存在しない場合は追加します。

次のように実行します。

var username=$("#username").val();
var password=$("#password").val();
$.ajax({
    url: "addperson.php",
    type: "POST", 
    async: false,
    data: {
        username: username,
        password: password
    }
})
.done (function(data, textStatus, jqXHR) { 
   var obj = JSON.parse(data);
   //Handle the response data here
    alert(obj.success); 
})
.fail (function(jqXHR, textStatus, errorThrown) { 
    alert("Error"); 
})
.always (function(jqXHROrData, textStatus, jqXHROrErrorThrown) { 
    alert("complete"); 
});

addperson.php は、次のような JSON 形式でエコーします。

$username1 = isset($_POST["username"]) ? $_POST["username"] : '';
    
$password1 = isset($_POST["password"]) ? $_POST["password"] : '';

$servername = "xxxxx";
$username = "xxxxx";
$password = "xxxxx";
$dbname = "xxxxx";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO user (username, password)
VALUES ('$username1', '$password1' )";

    ;  
    
    
   

if ($conn->query($sql) === TRUE) {
    
   echo json_encode(array('success' => 1));
} else{
    
    
  echo json_encode(array('success' => 0));
}





$conn->close();
于 2020-10-24T01:28:30.797 に答える