gpt4 book ai didi

php - jquery/js 和 php 通信问题

转载 作者:行者123 更新时间:2023-12-02 19:07:32 25 4
gpt4 key购买 nike

我正在使用 jquery/JS 和 PHP 进行简单的客户端/服务器通信。它工作正常,直到数据中包含 '.' 为止。

尝试过以下标题:

  • asdf-wq1 --> 有效
  • test1 --> 有效
  • bigip1.local --> '.'替换为“_”

我已经将 escape() 函数添加到我的代码中,但结果是相同的。

function xy(){
for (var i = 0; i < nodes.length; i++) {
var xy = escape(nodes[i].title) +"=" +escape(nodes[i].translate.x + "/" + nodes[i].translate.y);

$.ajax({
url: 'save_layout.php',
data: xy,
dataType: "text",
type: 'post',
success: function(output) {
$("#output").html(output);
},
error: function (response, status, error) {
alert("error" + response.responseText);
}
});
}
}

PHP:

foreach($_POST as $name=>$value) {
echo "$name $value \n";
}

Firebug 输出请求:

POST http /frontend/save_layout.php200 OK  186ms   jquery....min.js (Zeile 4)HeaderPostAntwortHTMLParameterapplication/x-www-form-urlencodedbigip1.local 470/390Quellebigip1.local=470/390

Firebug 输出(响应):

bigip1_local 470/390

正如您所看到的 - 它似乎已正确发送到服务器,但在服务器上,一旦读取我们的 $_POST - '.' 就是突然出现一个'_'

希望有人能帮助我!

最佳答案

您不应手动将数据转换为字符串。 jQuery 就是这么做的。只需将对象而不是字符串传递给 Ajax 函数即可。

而且你永远不应该(永远不!)使用escape()。该功能已损坏,没有理由使用它。如果出于某种原因必须执行手动 URL 编码,请使用 encodeURIComponent() 代替。

function xy(nodes) {
$.each(nodes, function (i, node) {
$.post("save_layout.php", {
title: node.title,
x: node.translate.x,
y: node.translate.y
})
.done(function (output) {
$("#output").html(output);
})
.fail(function (response, status, error) {
alert("error" + response.responseText);
});
});
}

另请注意我对您的代码所做的一些其他更改,以使其在 jQuery 上下文中更加惯用:

  • 节点作为参数而不是全局变量传入。这使得功能更加独立。
  • 使用 $.each() 替换 for 循环。
  • 使用显式的 $.post() 而不是更通用的 $.ajax()
  • 事实上,所有数据都作为传递,而不是作为键传递。对于每个请求,键 titlexy 都是相同的。这使得服务器端(客户端)的事情变得更容易。
  • 使用可以附加到 .post().done().fail() 回调, .get().ajax() 因为它们的本质是 promise 。您可以read more about $.Deferred and promises或者就这样——一种在 jQuery 中使用 Ajax 回调的非常方便的方法。

您可能需要考虑将代码重构为对所有对象发出一个 Ajax 请求,而不是对每个对象发出一个请求。 HTTP 请求需要时间,最好将它们结合起来。

关于php - jquery/js 和 php 通信问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14183014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com