1

Amazon、Etsy、および JCrew からの情報を解析し、Rails で構築されたウィッシュリスト アプリケーションに送信するブックマークレット アプリを作成しようとしています。JavaScript ファイルを DOM にロードするブックマーク ボタンの作成には成功しましたが、正しく実行されず、データがアプリに渡されていないようです。または、私のJavaScriptに問題があるのか​​もしれません。誰かが私が間違っていることを理解するのを手伝ってくれますか? 以下にjsファイルを含めました。

function() {

function get_amazon_product_info() 
    {
        var title_span = document.getElementById("btAsinTitle");
        var title = title_span.innerText;

        var image_tag = document.getElementById("main-image");
        var image = image_tag.getAttribute("src");

        var price_span = document.getElementById("actualPriceValue");
        var price = price_span.innerText;

        var product_info = {
            title: title,
            image: image,
            price: price
        }
        return product_info
    }

function get_etsy_product_info()
{
        var title_span = document.getElementById("item-title");
        var title = title_span.innerText;

        var image_div = document.getElementById("fullimage_link1");
        var image_tag = image_div.getElementsByTagName("img");
        var image = image_tag[0].getAttribute("src");

        var price_div = document.getElementsByClassName("item-price");
        var price_span = price_div[0].getElementsByClassName("currency-value")
        var price = price_span[0].innerText;

        var product_info = {
            title: title,
            image: image,
            price: price
        }
        return product_info
}

function get_jcrew_product_info()
{
    var title_span = document.getElementById("pdp-title");
        var title = title_span.innerText;

        var image_div = document.getElementsByClassName("prod_main_img");
        var image_tag = image_div[0].getElementsByTagName("img");
        var image = image_tag[0].getAttribute("src");

        //lame implementation -- need to be able to determine which radio button is checked. Finish later!

        var price_div = document.getElementsByClassName("pdp-shapes");
        var price_span = price_div[0].getElementsByClassName("price")
        var price = price_span[0].innerText;

        var product_info = {
            title: title,
            image: image,
            price: price
        }
        return product_info
}

function determine_params() 
{
        domain = document.domain;
        if (domain == 'www.amazon.com')
        {   
            get_amazon_product_info();
        }
        else if (domain == 'www.etsy.com')
        {
            get_etsy_product_info();
        }
        else if (domain == 'www.jcrew.com')
        {
            get_jcrew_product_info();
        }
}   

function send_data(product_info)
{           
    var link_url = document.URL;
    var http = new XMLHttpRequest();
    var url = "http://max-miller.local:3000/add_product";
    var params = "title=" + product_info[title] + "&image=" + product_info[image] + "&price=" + product_info[price] + "&link_url=" + link_url;
    http.open("POST", url , true);

    //Send the proper header information along with the request
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.setRequestHeader("Content-length", params.length);
    http.setRequestHeader("Connection", "close");

    http.onreadystatechange = function() {
        if(http.readyState == 4 && http.status == 200) {
            alert(http.responseText);
        }
    }

    http.send(params);
}

determine_params();
send_data(product_info);

}

4

3 に答える 3

0

サーバーに CORS 権限を設定しましたか?

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

http://enable-cors.org/

そうでない場合、AJAX は同一オリジン ポリシーにより失敗します。

http://en.wikipedia.org/wiki/Same_origin_policy

于 2013-04-19T04:01:59.310 に答える