質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

2回答

1233閲覧

XMLHttpRequest から jQuery.ajax への乗り換え

alan0223

総合スコア0

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2021/03/05 18:22

編集2021/03/06 03:25

こんにちは。

TypeScriptでXMLHttpRequestを使っているのですが、jQuery.ajaxの方が書きやすそうなので
乗り換えようとしています。が、その書き換え方で苦しんでしまっています。
jQueryは3.5です。

↓これ(正常動作を確認済み)を

Typescript

1/* 2** XMLHttpRequest版 3*/ 4function _login(key: string, accountId: string, password: string): void { 5 const httpRequest = new XMLHttpRequest(); 6 7 httpRequest.open("POST", "https://xxxxx/xxx/xxxxx"); 8 httpRequest.setRequestHeader("Content-Type", "application/json"); 9 httpRequest.setRequestHeader("XXXXX", key); 10 11 httpRequest.onreadystatechange = (): void => { 12 const readyState = httpRequest.readyState; 13 if (readyState === XMLHttpRequest.DONE) { 14 const status = httpRequest.status; 15 if (status === 201) { //Created 16 const sessionJson = JSON.parse(httpRequest.responseText); 17 nextStep(accountId, sessionJson.token as string); 18 } 19 } 20 } 21 httpRequest.send(`{"accountId":"${accountId}","password":"${password}"}`); 22}

↓こんな感じに書き換えて見たのですが400(Bad Request)になってしまいます。

TypeScript

1/* 2** jQuery.ajax版 3*/ 4function login(key: string, accountId: string, password: string): void { 5 $.ajax("https://xxxxx/xxx/xxxxx", { 6 type: "POST", 7 contentType: "application/json", 8 headers: { 9 'XXXXX': key 10 }, 11 data: { 12 accountId: accountId, 13 password: password 14 }, 15 dataType: "json" 16 }) 17 .done((response: any) => { 18 const sessionJson = JSON.parse(response); 19 nextStep(accountId, sessionJson.token as string); 20 }) 21 .fail(() => { 22 console.log("err!"); //400 BadRequest 23 }); 24}

Bad Requestが返るということはAPIを叩く事は出来ている。が叩き方が悪いのだと思っています。
正しく叩くにはどう書けは良いのでしょうか。

JQueryAjaxSettingsのどれがヘッダでどれがボディに当たるのかがわからなくて
検索したり、試行錯誤したり、といった状態です。

よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/03/05 21:46

コードやエラーはマークダウンのcode機能を利用してご提示ください。 https://teratail.com/questions/238564 あとfailにもコールバック引数沢山あるのでそれぞれ確認してください。 https://api.jquery.com/jquery.ajax/ jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {}); An alternative construct to the error callback option, the .fail() method replaces the deprecated .error() method. Refer to deferred.fail() for implementation details.
alan0223

2021/03/06 00:04

コードの書き方ありがとうございます。 fail見直してみます。このページは結構読んだのですが、また読み直します。
Lhankor_Mhy

2021/03/06 01:23

両者のリクエストヘッダに違いはありますか?
Lhankor_Mhy

2021/03/06 01:32

上記のリクエストヘッダの件、自分の環境で試してみたところ、 jQueryでは、X-Requested-With が追加されていました。 ドキュメントを見たところ、 > The header X-Requested-With: XMLHttpRequest is always added, but its default XMLHttpRequest value can be changed here. https://api.jquery.com/jQuery.ajax/ とのこと。 このヘッダをサーバでチェックしている可能性はありませんか?
Lhankor_Mhy

2021/03/06 01:33

あと、Accept ヘッダの内容も異なりました。
alan0223

2021/03/06 03:24

>両者のリクエストヘッダに違いはありますか? 無いつもりで書いているのですが、実際には違うのかもしれません。 JQueryAjaxSettingsのどれがヘッダでどれがボディに当たるのかがわからなくて 検索したり、試行錯誤したり、といった状態です。
Lhankor_Mhy

2021/03/06 03:39 編集

> 無いつもりで書いているのですが、実際には違うのかもしれません。 では、ご確認された方がいいと思います。 もって回った言い方をして申し訳ありません。「両者のリクエストヘッダに違いはありますか?」とは「両者のリクエストヘッダに違いがあるかどうかを調べて、ここに提示してください」という意味です。 開発者ツールの使い方はわかりますか? 繰り返しになりますが、当方で試したところ上記の通りの違いがありますので、それが原因かどうかをサーバ側管理者に照会することが問題解決につながるのではないか、と考えています。
Lhankor_Mhy

2021/03/08 02:30

「400(Bad Request)になってしまいます」という話はどうなったんだろう?
alan0223

2021/03/09 14:46

解消しました。
guest

回答2

0

TypeScriptでXMLHttpRequestを使っているのですが、jQuery.ajaxの方が書きやすそうなので

乗り換えようとしています。が、その書き換え方で苦しんでしまっています。

それなら書き換える必要自体ないかと思うのですが、どうなのでしょうか?

投稿2021/03/06 01:14

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alan0223

2021/03/06 03:30

未完成、発展途上のコードで、これからまだ大きくなる予定なので、 小さなうちにより良い仕方にしておこうという趣旨の変更です。
maisumakun

2021/03/06 03:39

jQueryを使うことが、必ずしも「より良い」とは限りません。
guest

0

自己解決

とつぜんひらめいてできました。もうちょっとだったんですねー。
.doneの第一引数は最初からJSONでパース不要でした。

TypeScript

1/* 2** jQuery.ajax版 3*/ 4function login(key: string, accountId: string, password: string): void { 5 $.ajax("https://xxxxx/xxx/xxxxx", { 6 type: "POST", 7 headers: { 8 contentType: "application/json", 9 "XXXXX": key 10 }, 11 data: { 12 accountId: accountId, 13 password: password 14 }, 15 dataType: "json" 16 }) 17 .done((json: any) => { 18 nextStep(accountId, json.token as string); 19 }) 20 .fail(() => { 21 console.log("err!"); 22 }); 23}

投稿2021/03/06 14:42

alan0223

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問