通过.ajax()将数据传递给PHP脚本的正确方法是什么?
我试图通过jQuery .ajax()发送一段数据到PHP脚本,然后将其加载到div容器中。然后PHP脚本将运行这段数据,其内容将返回到上述div容器中。通过.ajax()将数据传递给PHP脚本的正确方法是什么?
最初,我写了一段代码(如下所示),它在单击时成功添加了正确的元素,但无法正确命名它们,因为它没有将count_bucket变量传递给PHP。
var count_bucket = 4;
var loadPHP = "create_new_bucket.php";
$(".add_bucket").click(function(){
count_bucket++;
$("#tree_container2").append($('<div id="bunch' + count_bucket + '">').load(loadPHP));
return false;
});
然后,我试图将count_bucket变量传递给PHP脚本,将代码更改为此(如下所示)。
var count_bucket = 4;
$(".add_bucket").click(function() {
count_bucket++;
var bucket_add = $.ajax ({
type: "GET",
url: "create_new_bucket.php",
data: var count_bucket,
dataType: "json",
async: false,
}).responseText;
$('#tree_container2').append($('<div id="bunch' + count_bucket + '">').load(bucket_add));
});
的PHP文件create_new_bucket.php看起来是这样的:
<?php
include_once "test_functions.php"; // include functions page
$i = $_GET["count_bucket"];
drawBunchNew($i);
?>
我不清楚其中阿贾克斯的方面()不正确。我怀疑我没有在PHP中正确收集变量,或者我使用不正确的语法将它传递给PHP文件。如果有人能帮助我识别错误,我将不胜感激。
*UPDATE* ** * **
感谢TEJS & Tandu。我很清楚如何构建数据,但我仍然无法使jQuery的全部工作。我采用了Tandu的建议来使用.load(),并将我的PHP更改为使用POST来提取数据,但仍无法正常工作。
var count_bucket = 4;
$(".add_bucket").click(function() {
count_bucket++;
var bucket_add = $.load ("create_new_bucket.php", {count_bucket: count_bucket}, }).responseText;
$('#tree_container2').append($('<div id="bunch' + count_bucket + '">').load(bucket_add));
});
而且PHP是:
我用<?php
include_once "test_functions.php"; // include functions page
$i = $_POST["count_bucket"];
drawBunchNew($i);
?>
最后工作的jquery(最终PHP是与上述相同):
var count_bucket = 4;
var loadPHP = "create_new_bucket.php";
$(".add_bucket").click(function(){
count_bucket++;
$("#tree_container2").append($('<div id="bunch' + count_bucket + '">').load(loadPHP, {count_bucket: count_bucket}));
return false;
});
Ajax请求的数据属性是要成为一个客体;认为它像JSON:
{ data: var response }
是无效的JSON。然而,你可以做这样的事情:
data: { myKey: 'myValue', myKey2: 'myValue2' }
或者在您的情况:
data: { count_bucket: 4 }
它将包含在数据属性的数据发送到服务器,该名称值集的一部分。
jQuery中的ajax数据需要作为查询字符串格式的字符串('key[]=value&key[]=value&key[]=value'
)或作为json对象({key: [value, value, value]}
)传递。我相信你在那里的var
会有语法错误。您还需要指定密钥,因此可以使用data: {count_bucket: count_bucket}
或data: 'count_bucket=' + count_bucket
。
请注意,没有必要使用.ajax()
。使用,.post()
和.get()
通常会更好一些。在你的情况下,应该正常工作。传递数据作为第二个参数。
为什么你不希望请求是异步的?请注意,dataType
是返回值的数据类型,而不是您发送的内容。你是否收到json? jQuery通常也可以正确地猜出这个,如果你在PHP端设置标题,它会有很大的帮助。 GET
类型也是默认值。
最后说明:当使用时,如果您将数据作为字符串传递,它将使用GET,但如果将它作为对象传递,则使用POST。
谢谢Tejs&Tandu。我很清楚如何构建数据,但我仍然无法使jQuery的全部工作。我采用了Tandu的建议来使用.load(),并将我的PHP更改为使用POST来提取数据,但仍无法正常工作。我现在的代码是: – 2011-05-12 14:52:11
我已经发布了新代码的更新,我上面有 – 2011-05-12 15:01:27
只是想通了。发布上面的最终工作代码。谢谢您的帮助。 – 2011-05-12 15:20:32
哪个版本的jQuery?我很好奇,因为ajax在1.5版本中进行了重大改写。这里可能不会影响你。 – 2011-05-12 04:34:04