在 Phoenix 应用程序中调用 Ajax 中的两个请求而不是一个
Two request instead of one in Ajax call in Phoenix app
我仅通过一次调用(单击 HTML 元素)就收到了两个不同的请求,这在第二个请求上产生了错误,如您在此处所见:
[info] PUT /editables/Pag6
[debug] Processing by Skeleton.EditableController.update/2
Parameters: %{"editable" => %{"content" => "<p>Oá</p>"}, "par" => "Pag6"}
Pipelines: [:browser, :browser_session]
[debug] SELECT e0."id", e0."title", e0."content", e0."inserted_at", e0."updated_at" FROM "editables" AS e0 WHERE (e0."title" = ) ["Pag6"] OK query=154.2ms queue=15.2ms
[debug] BEGIN [] OK query=0.4ms
[debug] UPDATE "editables" SET "content" = , "updated_at" = WHERE "id" = ["<p>Oá</p>", {{2015, 9, 17}, {23, 15, 17, 0}}, 9] OK query=7.5ms
[debug] COMMIT [] OK query=7.4ms
[info] Sent 302 in 309ms
[info] PUT /editables/9
[debug] Processing by Skeleton.EditableController.update/2
Parameters: %{"editable" => %{"content" => "<p>Oá</p>"}, "par" => "9"}
Pipelines: [:browser, :browser_session]
[debug] SELECT e0."id", e0."title", e0."content", e0."inserted_at", e0."updated_at" FROM "editables" AS e0 WHERE (e0."title" = ) ["9"] OK query=0.7ms
[info] Sent 404 in 42ms
[error] #PID<0.301.0> running Skeleton.Endpoint terminated
Server: localhost:4000 (http)
Request: PUT /editables/9
** (exit) an exception was raised:
** (Ecto.NoResultsError) expected at least one result but got none in query:
from e in Skeleton.Editable,
where: e.title == ^"9"
第一个请求没问题,"par" 参数有正确的 "Pag6" 值,但在第二个请求中 "par" 有错误(它让我想起了一个 id)“9”价值。
Ajax 是:
$("#save").click(function() {
var content = $("#editor").html();
$.ajax({
url: "/editables/Pag6", //URL do controlador para a função que quero usar, neste caso PUT para fazer Update (4 é a ID da row)
type: "put",
data: {
editable: { content: content,
// title: "pageN"
}
},
headers: {
"X-CSRF-TOKEN": csrf
},
dataType: "json",
complete: function () {
alert( "Data Loaded");
}
});
});
我不明白为什么会这样:
1)两个请求而不是一个;
2)第二次请求中的"par"参数值错误...
要找到第二个 Ajax 请求的来源,请在 Chrome devtools 中为 "Any XHR".
保留一个 XHR 断点
当一个XHR被触发时,执行将被暂停。您可以返回堆栈跟踪以查找实际触发请求的代码。
我仅通过一次调用(单击 HTML 元素)就收到了两个不同的请求,这在第二个请求上产生了错误,如您在此处所见:
[info] PUT /editables/Pag6
[debug] Processing by Skeleton.EditableController.update/2
Parameters: %{"editable" => %{"content" => "<p>Oá</p>"}, "par" => "Pag6"}
Pipelines: [:browser, :browser_session]
[debug] SELECT e0."id", e0."title", e0."content", e0."inserted_at", e0."updated_at" FROM "editables" AS e0 WHERE (e0."title" = ) ["Pag6"] OK query=154.2ms queue=15.2ms
[debug] BEGIN [] OK query=0.4ms
[debug] UPDATE "editables" SET "content" = , "updated_at" = WHERE "id" = ["<p>Oá</p>", {{2015, 9, 17}, {23, 15, 17, 0}}, 9] OK query=7.5ms
[debug] COMMIT [] OK query=7.4ms
[info] Sent 302 in 309ms
[info] PUT /editables/9
[debug] Processing by Skeleton.EditableController.update/2
Parameters: %{"editable" => %{"content" => "<p>Oá</p>"}, "par" => "9"}
Pipelines: [:browser, :browser_session]
[debug] SELECT e0."id", e0."title", e0."content", e0."inserted_at", e0."updated_at" FROM "editables" AS e0 WHERE (e0."title" = ) ["9"] OK query=0.7ms
[info] Sent 404 in 42ms
[error] #PID<0.301.0> running Skeleton.Endpoint terminated
Server: localhost:4000 (http)
Request: PUT /editables/9
** (exit) an exception was raised:
** (Ecto.NoResultsError) expected at least one result but got none in query:
from e in Skeleton.Editable,
where: e.title == ^"9"
第一个请求没问题,"par" 参数有正确的 "Pag6" 值,但在第二个请求中 "par" 有错误(它让我想起了一个 id)“9”价值。 Ajax 是:
$("#save").click(function() {
var content = $("#editor").html();
$.ajax({
url: "/editables/Pag6", //URL do controlador para a função que quero usar, neste caso PUT para fazer Update (4 é a ID da row)
type: "put",
data: {
editable: { content: content,
// title: "pageN"
}
},
headers: {
"X-CSRF-TOKEN": csrf
},
dataType: "json",
complete: function () {
alert( "Data Loaded");
}
});
});
我不明白为什么会这样: 1)两个请求而不是一个; 2)第二次请求中的"par"参数值错误...
要找到第二个 Ajax 请求的来源,请在 Chrome devtools 中为 "Any XHR".
保留一个 XHR 断点当一个XHR被触发时,执行将被暂停。您可以返回堆栈跟踪以查找实际触发请求的代码。