jquery ajax在直接执行时返回成功,但在附加到按钮时返回错误,即使服务器响应为200 OK

时间:2015-05-01 18:58:33

标签: javascript jquery ajax json sails.js

这与其他类似问题有些相关:

jquery ajax returns error but is success

jquery .ajax always returns error - data being added to database

Jquery Ajax Call always returns error

但是,我的问题似乎不是data:"json"问题。

我的代码是对服务器的简单POST请求,出于测试目的,它总是返回200 OK。

如果我在文档就绪后直接运行jquery代码,它就可以正常工作并调用success函数。

但是如果我将它附加到on("click")按钮事件,它总是返回错误函数。服务器上没有任何变化,我可以在控制台上看到正在调用正确的资源。

我的主要代码位于js文件中:

var myObj = function(){
    var url = "myURL";
    this.functionINeed = function(data, cb) {
        ajaxPost(url, data, cb);
    };

    function ajaxPost(url, data, cb){
        $.ajax({
            "url" : url,
            "contentType" : "application/json; charset=UTF-8",
            "data" : data,
            "type" : "POST",
            "success" : function(serverData, textStatus, jqXHR){
                cb(null, {
                    "serverData" : serverData,
                    "textStatus" : textStatus,
                    "jqXHR" : jqXHR
                });
            },
            "error": function (jqXHR, textStatus, errorThrown) {
                cb({
                    "jqXHR" : jqXHR,
                    "textStatus" : textStatus,
                    "errorThrown" : errorThrown
                });
            }
        });
    };
}
//I initialize the object directly on the js file
MyObj = new myObj();

然后,第一个场景:直接在页面加载上调用函数:

var data = {
        "action" : "someaction",
        "code" : "somecode"
    }
    MyObj.functionINeed(JSON.stringify(data), function(err, response){
        if(err){
            alert(err.errorThrown);
            return err;
        }else{
            alert(response.textStatus);
            return response;
        }
    });

这很好用:调用服务器,返回内容,JQuery调用success函数。

但是,如果我将此代码附加到按钮事件,它总是返回error函数。我正在监视服务器,我确信它正在返回正确的数据。

$("#myButton").on("click", function(){
    var data = {
        "action" : "someaction",
        "code" : "somecode"
    }
    MyObj.functionINeed(JSON.stringify(data), function(err, response){
        if(err){
            alert(err.errorThrown);
            return err;
        }else{
            alert(response.textStatus);
            return response;
        }
    });
});

对于记录,我的服务器是带有Sails.js的Node.js,但这似乎并不重要。

许多类似的问题在某种程度上与data:"json"问题有关,但我已将其删除,最奇怪的是,只有在将代码附加到事件时才会发生这种行为。

我怀疑存在某种范围问题(对象在文件上实例化,例如),但每次都正确调用服务器。我无法理解为什么JQuery会将所有响应解释为错误(以及空服务器数据)。

我在这里做错了什么?

0 个答案:

没有答案