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に送ることができないのかどうかはわかりません。
ありがとうございました。
javascriptでcsvファイルを読むのではなく、PHPにアップロードするのはなぜですか。 PHPをCURLで読み込み、解析して呼び出しさせますか? – Jeet
PHP関数json_encodeはデータを正しくエンコードしますが、単一のJSONオブジェクトにアクセスしてBigCommerce APIに送信することはできません。これは、各項目のIDが変更されるため重要です。 – BMitrano825
'json_encode'は配列を' JSON'文字列に変換します。あなたの 'json'文字列が' json'オブジェクトに '{}'として向いていない場合。次に、JSON_FORCE_OBJECTを2番目のパラメータとして 'json_encode'に渡します。おそらく、これはあなたが探しているものですか? – Jeet