2016-08-08 14 views
0

CSVファイルを取得してJSONに解析し、REST APIを使用してBigCommerceに送信するメソッドを作成しようとしています。最初は、Javascriptを使ってすべてを行い、BigCommerceに実際に接続してデータをPUTするまで作業を進めました。 BigCommerceはCORSを許可しないため、サーバーからの401応答となり、実際に送信されるデータはありません。このため、私はPHPでそれを行うように切り替えるつもりでしたが、特定のJSONオブジェクトを取得できることはJavascriptの場合よりもはるかに困難です。私が思いついた解決策は、Javascriptでデータを解析し、それをPHPスクリプトに1行ずつ送り、PHPスクリプトがBigCommerceに接続してそれを送信することです。AJAXからPHPスクリプトへのJSONの送信

まずはこれが可能ですか?あなたは私がパパコードの途中でI = 0とI + 1との奇妙な何かをしなければならなかったに気づくでしょう

$(document).ready(function() { 
      $('[type=file]').change(function() { 
       if (!("files" in this)) { 
        alert("File reading not supported in this browser"); 
       } 
       var file = this.files && this.files[0]; 
       if (!file) { 
        return; 
       } 


       i=0; 
       Papa.parse(file, { 
        delimiter: ",", // auto-detect 
        newline: "", // auto-detect 
        header: true, 
        dynamicTyping: true, 
        preview: 0, 
        encoding: "", 
        worker: false, 
        comments: false, 
        step: function(results, parser) { 
         console.log("Row data:", results.data); 
         console.log("Row errors:", results.errors); 
         currentID = results.data[i]["id"]; 
         currentResult = results.data[i]; 
         sendToBC(currentID, currentResult); 
         i+1; 
        }, 
        complete: function(results, file) { 
         console.log("Parsing complete:", results, file); 
         $("#parsed_JSON").css("display", "block"); 
         $("#ready_btn").css("display", "block"); 
         $("#select_file").css("display", "none"); 
         $("#retry_btn").css("display", "block"); 
        }, 
        error: function(error, file) { 
         console.log("Parsing failed:", error, file); 
         alert("Parsing failed. Check file and refresh to try again."); 
        }, 
        download: false, 
        skipEmptyLines: true, 
        chunk: undefined, 
        fastMode: undefined, 
        beforeFirstChunk: undefined, 
        withCredentials: undefined 

       }) 
      }); 

      function sendToBC(id,data) { 
       jQuery.ajax({ 
        type: "PUT", 
        url: "https://store.mybigcommerce.com/api/v2/products/" + id + "/discountrules.json", 
        data: data, 
        xhrFields: { 
         withCredentials: true 
        }, 
        headers: { 
         'Authorization': 'Basic ' + btoa('username:key') 
        }, 
        dataType:"json", 
        async: false, 

        success: function() { 
         alert("success") 
        }, 
        error: function(xhr, status, error) { 
         console.log(error); 
        } 

       }); 
      } 

それが理由だった。ここで

は、私のJavascriptのコードの一部であります私はステップ関数でforループを実行できませんでした。

は私のPHPだけで、基本的なカールの機能である:

$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $api_url); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Accept: application/json', 'Content-Length: 0')); 
    curl_setopt($ch, CURLOPT_VERBOSE, 0); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_USERPWD, "username:key"); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $complete); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $response = curl_exec($ch); 
    curl_close ($ch) 

私は任意のヘルプは素晴らしいだろう、特にAJAXを通してそれに値を渡すとPHPで最も経験を持っていけません。私は実際にファイル間の値の受け渡しが実際にどのように機能するのか、このデータをプログラマチックに最良の方法でPHPに送ることができないのかどうかはわかりません。

ありがとうございました。

+0

javascriptでcsvファイルを読むのではなく、PHPにアップロードするのはなぜですか。 PHPをCURLで読み込み、解析して呼び出しさせますか? – Jeet

+0

PHP関数json_encodeはデータを正しくエンコードしますが、単一のJSONオブジェクトにアクセスしてBigCommerce APIに送信することはできません。これは、各項目のIDが変更されるため重要です。 – BMitrano825

+1

'json_encode'は配列を' JSON'文字列に変換します。あなたの 'json'文字列が' json'オブジェクトに '{}'として向いていない場合。次に、JSON_FORCE_OBJECTを2番目のパラメータとして 'json_encode'に渡します。おそらく、これはあなたが探しているものですか? – Jeet

答えて

0

申し訳ありませんが、私がやったやり方はPHPを使用していて、自分のキーで配列から取得した値でJSON文字列を作成していただけです。だから私がやった:

contents[$i]['id'] 

は、現在の項目のIDを取得し、変数に格納していることをやったし、CSVの他のすべての列のため。次に、このような文字列を作成しました。

$jsonObject[] = '{"min": '.$min.',"max": '.$max.',"type": "'.$type.'","type_value": '.$value.'}'; 

CURLを使用してBigcommerceに送信しました。

0

{"id": "77", "min": "1", "max": "6", "price": 10}のような文字列オブジェクトを取得することを考慮してください。 JSONオブジェクトからid(77)を取得したいとします。

$str = '{"id": "77", "min": "1", "max": "6", "price": 10}'; 
$jsonObj = json_decode($str); 
$jsonObj->id; // the id. 

ここで$jsonObj->idは、あなたのAPIを呼び出すためのIDです。

+0

これは基本的に私がやり遂げたばかりのもので、JSON文字列をAPIに送るために自分で作成したものです。助けてくれてくれてありがとう、あなたは私を正しい道につけた。 – BMitrano825

関連する問題