jQuery ajax Uncaught TypeError:非法调用

时间:2015-01-06 15:31:14

标签: javascript php jquery ajax

我在这个问题上阅读的所有帖子都是因为传递的对象包含其他对象,而不是原始值。

我的数据对象都是原始值,但它仍然无法正常工作。

以下是代码:

function ImageUploader(imgEl, params) {
    this.imgEl = imgEl;
    this.params = params;
    this.params["Function"] = "saveImage";
}

// send data from asynchronously uploaded image (as image URI)
// to PHP script which will write data to file
ImageUploader.prototype.uploadImage = function () {
    var iu = this;
    var fileReader = new FileReader();

    fileReader.onload = function (e) {
        iu.params["Image"] = e.target.result;
        console.log(iu.params);
        $.ajax({
            type: "POST",
            url: "/scripts/php/Form.php",
            data: iu.params,
            success: alert,
            error: function (jqXHR, status, error) {
                console.log(error, this);
            }
        });
    };

    this.params["FileName"] = this.imgEl.files[0].fileName || this.imgEl.files[0].name;
    fileReader.readAsDataURL(this.imgEl.files[0]);
};

这是一个拒绝的示例对象:

{
  FileName: "Matrix.jpg",
  Function: "saveImage",
  ID: 10,
  Image: "data:image/jpeg;base64,...",
  Line: 1,
  Name: "Test Form"
}

1 个答案:

答案 0 :(得分:3)

此错误与您的iu.params对象无关。错误在于这一行:

success: alert,

需要在" context"中调用window.alert()(或仅alert())函数。 window对象。

执行success: alert时,jQuery会在运行AJAX请求的jqXHR对象的调用中调用成功回调。像这样:

success.call(jqXHR, data)

我不知道完全代码jQuery使用

因此,您的alert正在错误的"上下文"中被调用,因此它会引发错误。要修复它,只需将匿名函数传递给success

success: function(data){
    alert(data);
}

或者,如果确实想要,您可以使用.bind()确保在正确的上下文中调用alert()

success: alert.bind(window)

如果确实 确实希望保留success: alert,那么您可以通过添加context: window告诉jQuery在正确的上下文中调用它到$.ajax来电。

警告alert.bind()(反过来context: window)可能无法在所有浏览器中使用,因此建议。我建议你改用匿名函数。