将数组从jQuery传递到PHP(并在提交后实际转到页面)
这看起来很简单,但我所做的是在jQuery中创建一个数组,并通过ajax将其发送到php,然后将记录插入数据库。但是我现在想做的是创建完全相同的数组,但是我想转到php页面并查看它收到的内容,而不是ajax 我该怎么做呢 我正在使用这个jQuery:将数组从jQuery传递到PHP(并在提交后实际转到页面),php,jquery,arrays,Php,Jquery,Arrays,这看起来很简单,但我所做的是在jQuery中创建一个数组,并通过ajax将其发送到php,然后将记录插入数据库。但是我现在想做的是创建完全相同的数组,但是我想转到php页面并查看它收到的内容,而不是ajax 我该怎么做呢 我正在使用这个jQuery: $('#preview').live('click',function(){ var postData = {}; $('#items tr').not(':fir
$('#preview').live('click',function(){
var postData = {};
$('#items tr').not(':first').each(function(index, value) {
var keyPrefix = 'data[' + index + ']';
postData[keyPrefix + '[index]'] = index;
postData[keyPrefix + '[supp_short_code]'] = $(this).closest('tr').find('.supp_short_code').text();
postData[keyPrefix + '[project_ref]'] = $(this).closest('tr').find('.project_ref').text();
postData[keyPrefix + '[om_part_no]'] = $(this).closest('tr').find('.om_part_no').text();
postData[keyPrefix + '[description]'] = $(this).closest('tr').find('.description').text();
postData[keyPrefix + '[quantity_input]'] = $(this).closest('tr').find('.quantity_input').val();
postData[keyPrefix + '[cost_of_items]'] = $(this).closest('tr').find('.cost_of_items').text();
postData[keyPrefix + '[cost_total_td]'] = $(this).closest('tr').find('.cost_total_td').text();
});
$.ajax
({
type: "POST",
url: "preview.php",
dataType: "json",
data: postData,
cache: false,
success: function()
{
}
});
});
这个PHP:
if (isset($_POST['data']) && is_array($_POST['data'])) {
foreach ($_POST['data'] as $row => $data) {
echo $data['index'];
echo $data['project_ref'];
echo $data['supp_short_code'];
echo $data['om_part_no'];
echo $data['description'];
echo $data['quantity_input'];
echo $data['cost_of_items'];
echo $data['cost_total_td'];
}
}
为什么不使用JSON呢
为什么不使用JSON
您可以在会话中存储接收到的数据:
if (isset($_POST['data']) && is_array($_POST['data'])) {
session_start();
$_SESSION['data'] = $_POST['data'];
}
然后链接到另一个PHP页面,该页面从会话检索数据并显示:
session_start();
if (isset($_SESSION['data']) && is_array($_SESSION['data'])) {
foreach ($_SESSION['data'] as $row => $data) {
echo $data['index'];
echo $data['project_ref'];
echo $data['supp_short_code'];
echo $data['om_part_no'];
echo $data['description'];
echo $data['quantity_input'];
echo $data['cost_of_items'];
echo $data['cost_total_td'];
}
}
您可以在会话中存储接收到的数据:
if (isset($_POST['data']) && is_array($_POST['data'])) {
session_start();
$_SESSION['data'] = $_POST['data'];
}
然后链接到另一个PHP页面,该页面从会话检索数据并显示:
session_start();
if (isset($_SESSION['data']) && is_array($_SESSION['data'])) {
foreach ($_SESSION['data'] as $row => $data) {
echo $data['index'];
echo $data['project_ref'];
echo $data['supp_short_code'];
echo $data['om_part_no'];
echo $data['description'];
echo $data['quantity_input'];
echo $data['cost_of_items'];
echo $data['cost_total_td'];
}
}
因此,您当前正在使用jQuery创建POST字符串,然后使用ajax将其发送到php脚本。现在您实际上想要直接发布到PHP。对吗 如果我没有弄错,有两种选择:
标记和提交
按钮使用jQuery来创建和
当
用户点击提交按钮并
在执行提交操作之前
完成因此,您当前正在使用jQuery创建POST字符串,然后使用ajax将其发送到php脚本。现在您实际上想要直接发布到PHP。对吗 如果我没有弄错,有两种选择:
标记和提交
按钮使用jQuery来创建和
当
用户点击提交按钮并
在执行提交操作之前
完成根据dnagirl所说,您可以使用jQuery生成POST表单并提交它
$('#preview').live('click',function(){
var cForm = $('<form method="post">').attr('action', "preview.php");
$('#items tr').not(':first').each(function(index, value) {
var keyPrefix = 'data[' + index + ']';
cForm.append($('<input type="hidden">').attr('name', keyPrefix + '[index]').val(index));
cForm.append($('<input type="hidden">').attr('name', keyPrefix + '[supp_short_code]').val($(this).closest('tr').find('.supp_short_code').text());
// etc
});
cForm.hide().append('body').submit();
return false;
});
$(“#预览”).live('click',function(){
var cForm=$('').attr('action','preview.php”);
$('#items tr')。不是(':first')。每个(函数(索引,值){
var keyPrefix='data['+index+']';
cForm.append($('').attr('name',keyPrefix+'[index]')).val(index));
cForm.append($('').attr('name',keyPrefix+'[supp_short_code]')).val($(this).closest('tr').find('.supp_short_code').text());
//等
});
cForm.hide().append('body').submit();
返回false;
});
在创建字符串中使用attr()而不是内联使用attr()的原因是为了避免转义问题,而且在我看来它看起来更干净。根据dnagirl的说法,您可以做的是使用jQuery生成POST表单并提交它
$('#preview').live('click',function(){
var cForm = $('<form method="post">').attr('action', "preview.php");
$('#items tr').not(':first').each(function(index, value) {
var keyPrefix = 'data[' + index + ']';
cForm.append($('<input type="hidden">').attr('name', keyPrefix + '[index]').val(index));
cForm.append($('<input type="hidden">').attr('name', keyPrefix + '[supp_short_code]').val($(this).closest('tr').find('.supp_short_code').text());
// etc
});
cForm.hide().append('body').submit();
return false;
});
$(“#预览”).live('click',function(){
var cForm=$('').attr('action','preview.php”);
$('#items tr')。不是(':first')。每个(函数(索引,值){
var keyPrefix='data['+index+']';
cForm.append($('').attr('name',keyPrefix+'[index]')).val(index));
cForm.append($('').attr('name',keyPrefix+'[supp_short_code]')).val($(this).closest('tr').find('.supp_short_code').text());
//等
});
cForm.hide().append('body').submit();
返回false;
});
使用attr()的原因在创建字符串的地方而不是内联是为了避免转义的问题,在我看来它看起来更干净。你得到了什么?任何错误消息?你的问题是什么?抱歉,没有错误,但我要说的是,这是在使用ajax,我想做的是像一个超链接,并实际转到php页面。不仅仅是ge这不是一个ajax响应!你得到了什么?有错误消息吗?你有什么问题?对不起,没有错误,但我想说的是,这是在使用ajax,我想做的是像一个超链接,并实际转到php页面。不仅仅是得到一个ajax响应!这是正确的,也许我很幼稚,但我不能仅仅将postData粘贴到超链接或som中吗ething?可能吗?@benhowdle89:你可以将GET数据放在超链接中,而不是POST数据。如果你的字段仅用于提取数据,那么GET是一种合理的方式。但是如果你正在更改字段的内容(例如更新数据库),应该使用POST。没错,也许我太天真了,但我能不能不把postData放在超链接或其他地方?可能吗?@benhowdle89:你可以把GET数据放在超链接中,而不是POST数据。如果你的字段只用于拉取数据,那么GET是一种合理的方式。但是如果你正在用字段改变事情的话(例如更新数据库),应使用POST。