我试图弄清楚如何使用ajax / query处理来自服务器的响应(服务器返回true或false(json编码)):
function submitFormWithAjax(form) {
form = $(form);
$.ajax({
url: form.attr('action'),
data: form.serialize(),
type: (form.attr('method')),
dataType: 'json'
});
var serverResponse = eval(result.responseText);
console.log(serverResponse);
return serverResponse;
}
现在当我控制日志结果时,属性responseText正确显示为true / false,但该函数似乎总是返回true。我不是一个javascript / jquery程序员,所以如果我在上面做的看起来'愚蠢'原谅我,我正在尝试将事情拼凑在一起。
- 更正,该函数始终返回false(不是如上所述)
答案 0 :(得分:3)
function submitFormWithAjax(form) {
var form = $(form);
var ret = false;
$.ajax({
url: form.attr('action'),
data: form.serialize(),
type: (form.attr('method')),
datatype: 'json',
success: function( data, status, xhttp) {
// data will be true or false if you returned a json bool
ret = data;
},
async: false // this is generally bad, it will lock up your browser while it returns, but the only way to fit it into your pattern.
});
return ret;
}
还有一个插件可以为您完成一些工作:
http://jquery.malsup.com/form/
哦,此外,请注意您的财产和价值名称的情况。我认为“dataType”需要是“数据类型”
我对这个解决方案并不十分了解,但它可以帮到你需要的地方。我认为你需要重构一下才能让它以异步方式正常工作。
答案 1 :(得分:1)
我怀疑你正在返回一个看起来像布尔的字符串。如果您将结果记录到console.log(result.responseText)
之类的控制台,result.responseText会是什么样子?它是否包含引号?
如果我是对的,你可能想要这样做:var serverResponse = $.parseJSON($.parseJSON(result.responseText))
如果它是一个字符串,你可以把它改成不是一个字符串,你应该这样做,并使用Darthg8r的答案。
答案 2 :(得分:1)
这可能更接近正确的做法....
$("#SomeButtonThatOpensDialog").click(function()
{
$("#ElementWithForm").dialog({
// dialog options here
buttons: {
Submit: function() {
$.ajax({
// ajax options
success: function(data, status, xhttp)
{
if ( data )
{
// if true
$("#ElementWithForm").dialog("destroy");
}
else
{ // if false, show some sort of message with errors
alert("OH NO!");
}
}
});
}
}
})
});