沒有真正期望得到答案,但現在有了這個2天掙扎,不知道怎麼回事。瀏覽器掛起(等待響應?)
所以在這裏我做了什麼:
通過AJAX,並立即開始在後端處理它上傳文件。
$.ajax({
type : "post",
cache: false,
contentType: false,
processData: false,
url : formAction,
data : formData
});
在後臺我寫會話存儲在那裏像10000 500目前的進展...
然後,我調用另一個AJAX從會話檢查狀態,我呼籲這個funcion每1秒鐘,直到responsve回報「完成」。
看上去對我來說合法,但問題是,在後端處理完成後,第一個XHR將狀態從'pending'更改爲200個瀏覽器凍結,看起來像是阻止它,像另一個請求或somehing。 chekc屏幕波紋管。
所以它的完成,檢查停止,狀態更改爲200,沒有發生,但瀏覽器凍結,試圖瀏覽器,火狐瀏覽器...暗示我殺的過程,但如果我等待一段時間它將刷新。
UPDATE
所以,我騙了一點點,我試圖再做一次相同,但沒有Ajax,看到類似的問題,後端處理完成後,瀏覽器應答等待(向後旋轉)以後。這就是表哥掛什麼。
這裏是我的後端是Laravel
foreach ($chunks as $rows)
{
$current_chunk++;
if ($current_chunk < $all_chunks) {
Session::put(['import_progress'=>'Importing ' . $current_chunk * 150 . ' of ' . $all_results]);
Session::save();
} elseif ($current_chunk >= $all_chunks) {
Session::put(['import_progress'=>'done']);
}
foreach ($rows as $row)
{
// transakcija start
DB::transaction(function() use ($row) {
$code = $row[0];
$gender = $row[1];
$brand_name = filter_var($row[2],FILTER_SANITIZE_STRING);
$category = $row[3];
$subcategory = $row[4];
$condition = $row[5];
$details = $row[6];
$composition = $row[7];
$materials = $row[8];
$colors = $row[9];
$patterns = $row[10];
$country = $row[11];
$size = $row[12];
$m_a = $row[13];
$m_b = $row[14];
$m_c = $row[15];
$m_d = $row[16];
$m_e = $row[17];
$m_f = $row[18];
$m_g = $row[19];
$product = new Product();
$product->code = $code;
$product->gender = $gender;
$product->size = $country . ' | ' . $size;
$product->condition = $condition;
$product->measurement_a = $m_a;
$product->measurement_b = $m_b;
$product->measurement_c = $m_c;
$product->measurement_d = $m_d;
$product->measurement_e = $m_e;
$product->measurement_f = $m_f;
$product->measurement_g = $m_g;
$product->save();
if (empty($code)) {
$bad_prods[] = $product->id;
}
if (!empty($brand_name)) {
$brand = Brand::firstOrCreate(['brand_name'=>$brand_name]);
$product_b = new ProductBrand();
$product_b->brand_id = $brand->id;
$product_b->product_id = $product->id;
$product_b->save();
}
if (!empty($materials)) {
$materials_exp = explode(',',$materials);
foreach ($materials_exp as $material) {
$material = Material::firstOrCreate(['material_name'=>trim($material)]);
$product_m = new ProductMaterial();
$product_m->material_id = $material->id;
$product_m->product_id = $product->id;
$product_m->save();
}
}
if (!empty($patterns)) {
$patterns_exp = explode('/',$patterns);
foreach ($patterns_exp as $pattern) {
$pattern = Pattern::firstOrCreate(['pattern_name'=>trim($pattern)]);
$product_p = new ProductPattern();
$product_p->pattern_id = $pattern->id;
$product_p->product_id = $product->id;
$product_p->save();
}
}
if (!empty($colors)) {
$colors_exp = explode('/',$colors);
foreach ($colors_exp as $color) {
$color = Color::firstOrCreate(['color_name'=>trim($color)]);
$product_c = new ProductColor();
$product_c->color_id = $color->id;
$product_c->product_id = $product->id;
$product_c->save();
}
}
$product_t = new ProductTranslation();
$product_t->product_id = $product->id;
$product_t->product_title = $brand_name;
$product_t->product_description = '<p>'.$details.'</p><p>'.$composition.'</p>';
$product_t->save();
}); // end transakcija
}
}
Session::put(['import_progress'=>'done']);
Session::put(['bad_prods'=>$bad_prods]);
return redirect()->route('admin.import');
在這裏,我檢查狀態
public function status()
{
return response()->json([
'status' => Session::get('import_progress'),
'bad_prods' => Session::get('bad_prods')
]);
}
有**的setTimeout()** **或setInterval的()**隨時隨地在代碼的其他人呢? 在定期的時間間隔後發佈你正在調用該功能的部分。 –
我也有,但沒有檢查狀態相同的情況發生,所以它不是一個問題... – RomkaLTU
後,你都令人耳目一新的片段/檢查狀態 –