【发布时间】:2012-10-17 03:14:10
【问题描述】:
我目前检查输入/文本区域/复选框/选择是否更改,如果是,那么我想启动我的函数来搜索数据库并更新“结果”div。现在这就是我到目前为止所拥有的......
它适用于更改没问题,唯一的问题是现在当我更改表单项时,它会检测到它,但新值不会传递给 .php 文件。有什么建议吗?
注意:我尝试使用 $(this).serialize();但这对我不起作用。我只是想将所有指定的表单变量传递给 PHP 文件。
$(document).ready(function() {
$("select,:checkbox").change(function(){ inits(); });
$("input,textarea").keystop(function(){ inits(); });
a = "GET";
b = "#recipeSearch";
c = $(b).attr('action') + '?r';
f = "#searchResults";
function inits(){
var values = {
'term' : $("input#searchterm").val(),
'photos' : $(b + " #requirephotos").val(),
'prep' : $(b + " #preptime").val(),
'cook' : $(b + " #cooktime").val()
}
console.log('Search Init');
$.ajax({
url: c,
cache: false,
dataType: 'json',
data: values, // $(b).serialize(); // this still didn't work
success: function(response) {
//decoded = JSON.stringify(response);
if (response) {
$(f).html(response);
}
//$.each(r.items, function(i,data){} //usage later on
},
error: function(e, jqxhr, settings, exception) {
console.log('Error: ' + e.toString() + ' - ' + jqxhr);
}
});
}
});
感谢任何和所有建议。我没有 jsfiddle 给你,因为它使用另一个脚本作为 keystop。
JSON 示例
{
"items": [
"item 1",
"item 2",
"item 3",
"item 4",
"item 5"
]
}
【问题讨论】:
-
你需要序列化表单,而不是
$(this)。应该是$('#id_of_form').serialize() -
尝试从
b中删除&。jQuery.ajax会在必要时自动添加(它会检查 URL 是否已经包含?)。结果是您发送URL?r&&term=...,这可能无法正常工作。 -
@Barmar - 我已经进行了这些更改,但现在我收到了解析器错误。
-
听起来 PHP 脚本没有返回正确的 JSON。
-
@Barmar 它返回具有正确标题的有效 json(我已将其注释掉)但现在 jQuery 返回 null。想法?
标签: jquery ajax this jsonserializer