2

我正在尝试从 AJAX 提交的表单返回回调。用户提交表单,服务器处理并返回有效响应,即错误消息以及可以执行操作的 JavaScript 函数。我正在使用 Zepto.js 回退到 jQuery,具体取决于浏览器。

我的ajax请求是:

$.ajax({
    success: function(data, status, xhr) {
        data.callback();
    },
    url: form.attr('action'),
    data: form.serialize(),
    dataType: 'json'
});

在服务器上,我想返回类似:

// PHP code
?>
{
    return: false,
    error: 'Sorry, we couldn’t find an account with that username or password.',
    callback: function() {
        console.log('this is the callback');
    }
}
<?php
// more PHP code

当返回浏览器回调函数时应该触发。我希望服务器返回回调,以便我可以使用相同的 JavaScript 代码并让它相应地响应服务器响应。

我需要将数据类型更改为脚本吗?但是我认为这只是用于加载 .js 文件,而不是代码块。

任何帮助表示赞赏。

4

2 回答 2

1

这里的一般感觉是我以错误的方式处理这个问题。于是修改了代码:

$.ajax({
    success: function(data, status, xhr) {
        var callback = data['callback'];
        callback();
    },
    url: form.attr('action'), // in this example it's badLogin
    data: form.serialize(),
    dataType: 'json'
});
// callback specified in PHP
badLogin: function() {
    console.log('bad login');
}

还有我的 PHP

if (!$valid) {
?>
{
    "return": false,
    "error": "Sorry, we couldn’t find an account with that username or password.",
    "callback": "badLogin"
}
<?php
}

感谢您为我指明正确的方向。

于 2012-07-13T14:57:12.473 回答
0

eval()如果您绝对确定该字符串将始终正确并且无法注入任何代码,则您始终可以将代码作为字符串返回并使用。

于 2012-07-13T13:50:00.110 回答