私は、フォームを使用して数字ダイアログを機能させるのと一緒に右に移動していました。私の最新の追加は、テスト Ajax リクエストでした。コードが機能していなかったので、道場の Web サイトの記事からコードを切り取り、貼り付けました。作業中の dijit ボタンに埋め込むと、次のエラーが表示されます。
「未定義」は関数ではありません (「request.post」を評価します)
これは私がコピーしたものです:
require(["dojo/request"], function(request){
request.post("post-content.php", {
data: {
color: "blue",
answer: 42
},
headers: {
"X-Something": "A value"
}
}).then(function(text){
console.log("The server returned: ", text);
});
});
これは私のスクリプトです:
<script>
require(["dojo/dom",
"dijit/Dialog",
"dijit/form/Form",
"dijit/form/TextBox",
"dijit/form/ValidationTextBox",
"dijit/form/Textarea",
"dijit/form/Button",
"dojox/validate/web",
"dojo/request",
"dojo/domReady!"],
function(dom, Dialog, Form, TextBox, ValidationTextBox, TextArea, Button, request){
alertDialog = new Dialog({
title: "Email Result",
content: "<p>No Content</p>",
sytle: "width 30em"
});
emailDialog = new Dialog({
title: "Email Form",
content: dom.byId("emailFormHTML").textContent,
style: "width: 50em"
});
emForm = new Form({
/*onSubmit: function(){
return this.validate();
}*/
},"contact-form");
toText = new TextBox({
readOnly: "readOnly",
value: "Staff"
},"to");
nameText = new ValidationTextBox({
placeholder: "Your Name",
required: "true",
missingMessage: "We'd like to know who you are."
},"name");
emailText = new ValidationTextBox({
placeholder: "Your email",
validator: dojox.validate.isEmailAddress,
invalidMessage: "This is not a valid email address!"
},"email");
messageText = new TextArea({
placeholder: "Your message"
},"message");
sendBtn = new Button({
label: "Send",
onClick: function(){
if (emForm.validate() == true){
emailDialog.hide();
request.post("send-message.php", {
data: {
color: "blue",
answer: 42
},
headers: {
"X-Something": "A value"
}
}).then(function(text){
console.log("The server returned: ", text);
});
}
}
},"submit-btn");
});
require(["dojo/dom",
"dijit/form/Button",
"dojo/domReady!"],
function(dom, Button)
{
var showEmailBtn = new Button({
onClick: function(){
toText.set("value","Executive Director");
emailDialog.show(); } },
"showEmail");
});
</script>
私が変更したのはphpファイルの名前だけでした。関数ヘッダーに何か関係があるような気がしますが、わかりません。
アップデート
1 つの問題を修正し、別の問題を引き起こしたと思います。関数ヘッダーを次のように変更しました。
require(["dojo/dom",
"dojo/request",
"dojo/dom-form",
"dijit/Dialog",
"dijit/form/Form",
"dijit/form/TextBox",
"dijit/form/ValidationTextBox",
"dijit/form/Textarea",
"dijit/form/Button",
"dojox/validate/web",
"dojo/domReady!"],
function(dom, request, domForm, Dialog, Form, TextBox, ValidationTextBox, TextArea, Button ){
これにより、最初のエラーが解消されました。これがヘッダーを宣言する正しい方法である場合、ルールが何であるかを知りたいです。どうやら、物事は何らかの順序で行われているに違いありません。
今、私はエラーが発生します:
ネットワークの問題
リソースのロードに失敗しました: サーバーは 500 のステータスで応答しました (内部サーバー エラー)
これはサファリにあります。同じ Web サイトに、AJAX を正常に実行する別のテスト ページがあります。
Firefox で試してみたところ、コンソールに次のエラーが表示されました。
[23:24:20.081] HTML ドキュメントの文字エンコーディングが宣言されていません。ドキュメントに US-ASCII 範囲外の文字が含まれている場合、一部のブラウザー構成では、ドキュメントが文字化けしてレンダリングされます。ページの文字エンコーディングは、ドキュメントまたは転送プロトコルで宣言する必要があります。@ http://test.loc/dojodialog/index.php
適切にフォーマットされたヘッダーが必要ですか? 私はどの例でもそれを見たことがありません。
答え
ダムプログラミングエラー。phpファイルのエラーでした。別のphpファイルをコピーして、不要なものを編集しました。閉じ括弧を残したことに気付かなかったので、php の実行に失敗しました。これで、500 エラーが発生した場合はサーバー側のコードを確認する必要があることがわかりました。