1

jQuery 1.9 で POST-JSON-Request を送信しようとしています。

コンソールで常に次のエラーが発生します。

TypeError: this.products は定義されていません。this.products.push(oneProduct);

ここに私のコードがあります

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript" charset="utf-8" src="resources/js/model/Product.js"></script> 
<script>
    function getdetails(){

        var p = new Product(15,11.5,"Pizza Test","P");
        var z = new Product(68,1.5,"Zutate Test","Z");

        p.addOneProduct(z);

        var request = $.ajax({
            type: "POST",
            url: "yb_test_post.php",
            dataType: "json",
            data: p
        });

        request.done(function(msg) {
            $("#msg").html( " Post parameter are: <br/>"+msg );
        });

        request.fail(function(jqXHR, textStatus) {
            alert( "Request failed: " + textStatus );
        });
    }
</script>

およびProduct.js

   function Product(id, price, name, type){
    this.id = id;
    this.price = +price;
    this.totalPrice = +price;
    this.name = name;
    this.type = type;
    this.products = [];

    this.addOneProduct = function(oneProduct){
        this.products.push(oneProduct);
        this.totalPrice= this.totalPrice+oneProduct.price;
    };
  }

私は何を間違っていますか?

4

1 に答える 1

4

product.js を変更する必要があります。問題は、への参照が失われていることですthis

これでうまくいくはずです:

function Product(id, price, name, type){
    this.id = id;
    this.price = +price;
    this.totalPrice = +price;
    this.name = name;
    this.type = type;
    this.products = [];
    var self = this;

    this.addOneProduct = function(oneProduct){
        self.products.push(oneProduct);
        self.totalPrice= self.totalPrice+oneProduct.price;
    };
  }

編集:メソッド addOneProduct を呼び出すと、this-reference が正しく解決されます。問題は、実際にサービスを呼び出して p をデータとして設定しようとするときです。オブジェクトをシリアル化すると、JS は実際にメソッドを呼び出しますが、その時点で参照が正しくありません。あなたがする必要があるのは、オブジェクトをデータに割り当てる前に文字列化することです:

var request = $.ajax({
            type: "POST",
            url: "yb_test_post.php",
            dataType: "json",
            data: JSON.stringify(p)
        });
于 2013-04-19T13:57:03.560 に答える