【发布时间】:2014-08-24 05:32:31
【问题描述】:
我在使用 jQuery Validate 和跨域远程验证时遇到问题。 我的情况是:
- PhoneGap 移动应用
- 远程服务器上的 PHP 脚本
- jQuery 1.9.1
- jQuery Mobile 1.4.2 作为界面框架
- jQuery Validate 1.12.0 作为表单验证插件
为了与服务器交互,我使用 jQuery Ajax 调用和 JSONP 作为跨域通信技术。 我必须使用远程规则验证一些表单字段,但是因为这些调用在另一个域上(从应用程序到服务器),所以我的响应格式有问题。使用 JSONP 我不能返回简单的“TRUE”或“FALSE”,而是返回 JSONP 格式的数据。
从服务器端,我有一个 PHP 函数,它返回 JSON 格式的数据:
if (.....)
$return["Result"] = TRUE;
else
$return["Result"] = FALSE;
header('Content-type: application/json');
echo $jsoncallback . "(" . json_encode(return) . ")";
从客户端我有这个 jQuery 验证代码:
rules: {
'email': {
required: true,
remote: {
type: 'post',
url: 'http://www.myurl.com/mypage.php',
data: {
email: function() {
return $('#email').val();
}
},
dataType: 'jsonp',
jsonp: 'jsoncallback',
success: function(data, status) {
if (data.Result === false)
return false;
else
return true;
}
}
}
},
messages: {
'email': {
required: 'message 1',
remote: 'message 2'
}
}
当远程验证通过时,上面的代码似乎可以正常工作,但在失败时却不行。 如果我在“成功”中发出这样的警报:
alert(data.Result);
它总是返回正确的值,但代码似乎一直在继续,并且没有打印错误消息。
有没有办法使用 jQuery Validate 来使用远程规则和 JSONP 验证字段?
提前致谢。
【问题讨论】:
-
你确定
data.Result是boolean类型吗? -
嗨,如果我用
if (data.Result == 'false')检查结果,没有任何变化... -
请联系
alert(typeof data.Result) -
建议的警报返回
boolean。在弹出警报后,代码继续运行,如果 data.Result 为 FALSE,表单结果也有效。 -
这个问题解决了吗?我有类似的问题,根本没有调用成功方法并且没有显示错误。有没有将 JSONP 用于远程的示例?谢谢。
标签: jquery ajax jquery-mobile jquery-validate jsonp