gpt4 book ai didi

PHP 覆盖 AJAX 发布请求

转载 作者:行者123 更新时间:2023-11-29 18:27:18 25 4
gpt4 key购买 nike

在我的代码中我有这个回调

 $('#tagList').tagit({
//Every new dag will be pushed in the list array
tagsChanged: function(tagValue,action,element){
list.push(tagValue);
$.ajax({
url: "dostuff.php",
type: "POST",
data:{ items:list.join("::")},
success: function(data){
$('#wrap').append(data);
}
});
}
});

每次我添加标签时,新添加的标签都会被推送到数组中,之后它会发出 AJAX 发布请求。

然后我这里有这些字段

<form method = "POST" action = "demo3.php">
News Title <input id = "news_title" type = "text" name = "news_title" /><br>
<label>Insert Some tags </label>
<ul id="tagList" data-name="demo2">
</ul>
<input type = "submit" name = "submit" id = "submit" value = "Post News" />
</div>
</form>

当我点击提交(它基本上重新加载页面)时,POST 全局数组中的 $_POST['items'](这是在每次添加新标签时根据 AJAX 请求创建的)被删除或删除。因此将我的 $_POST 全局数组留空。

无论如何我可以合并这两个吗?或者无论如何不要让 PHP 覆盖或删除 $_POST['items'] ?因为我的查询需要项目

另外我正在使用一个叫做 tagit 的插件

如果你们感兴趣,这是我的全部代码

<!doctype html>
<html>
<head>
<script src="demo/js/jquery.1.7.2.min.js"></script>
<script src="demo/js/jquery-ui.1.8.20.min.js"></script>
<script src="js/tagit.js"></script>
<link rel="stylesheet" type="text/css" href="css/tagit-stylish-yellow.css">
<script>
$(document).ready(function () {
var list = new Array();
$('#tagList').tagit({
//Every new dag will be pushed in the list array
tagsChanged: function(tagValue,action,element){
list.push(tagValue);
$.ajax({
url: "dostuff.php",
type: "POST",
data:{ items:list.join("::")},
success: function(data){
$('#wrap').append(data);
}
});
}
});
});
</script>
</head>
<body>

<div id="wrap">
<div class="box">
<button class = "viewTags">View Tags</button>
<form method = "POST" action = "demo3.php">
News Title <input id = "news_title" type = "text" name = "news_title" /><br>
<label>Insert Some tags </label>
<ul id="tagList" data-name="demo2">
</ul>
<input type = "submit" name = "submit" id = "submit" value = "Post News" />
</div>
</form>
</div>
</body>
</html>

这是干货。 PHP

 <?php 

$lis = $_POST['items'];
$liarray = explode("::", $lis);
print_r($liarray);
print_r($_POST);
?>

最佳答案

PHP 处理请求的方式是每个请求都与其他请求完全分开,这有时称为无共享架构。这是从 <form> 生成请求的原因至 demo3.php不知道 ajax 发送到 dostuff.php 的其他请求是这种分离。这不一定是特定于 php 的,这是因为底层 HTTP protocol是无国籍的。

如果您想在 <form> 时生成的请求中包含标签已提交,您需要将这些值添加到表单中。为此,tagit 库有一个由两个配置选项控制的内置方式:

  1. itemName控制参数命名(默认为 item )
  2. fieldName控制 itemName 中的字段被调用(默认为 tags )

如果你像这样初始化你的插件(demo 没有样式):

$('#tagList').tagit({
itemName: 'article',
fieldName: 'tags'
});

然后在提交时,发送到 php 的参数应该在 $_POST['article']['tags'] 中,生成的参数名称将类似于 article[tags][] .查看demos的插件。 (页面源代码有格式很好的 javasript 示例)。默认情况下只需调用 $('#tagList').tagit();没有所有额外的回调或配置应该可以工作。

这就是它应该如何出现在 firebug 的网络面板中(不要介意 demo4.php 不在那里) shot of firebug net panel after hitting submit


如果你想手动完成,你可以 Hook submit <form>的事件像这样:

$('form').on('submit', function(){
var $form = $(this),
tags = $('#tagList').tagit('assignedTags'); // see the docs https://github.com/aehlke/tag-it/blob/master/README.markdown#assignedtags
$.each(tags, function(i, tag){
$('<input type="hidden" name="tags[]">').attr('value', tag).appendTo($form); // using jquery to create new elements
});
});

通过使用 assignedTags tagit 插件的方法(使用 jquery ui 调用模式),您可以获得标签名称,并在提交 <form> 之前简单地添加一个新的隐藏输入。 .如果您可以包含任何可以想象的字符串,那么像这样将它们连接在一起可能不是一个好主意 :: .

在示例中,我为每个标签使用了单独的输入,因此在您的 demo3.php 中它们将作为数组到达(以 [] 结尾的名称使 php 这样做)。

关于PHP 覆盖 AJAX 发布请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11771076/

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