Как использовать пользовательский файл для ajax вместо admin- ajax. php - PullRequest
0 голосов
/ 28 февраля 2020

на сайте WordPress сделана корзина. Там, нажав на кнопку, на сервер отправляется запрос ajax, обработка проходит PHP. Корзина для хранения - повар ie. Время показывает, что основной тормоз возникает именно при передаче данных с js на PHP и наоборот. Js и PHP работают нормально. Отправляет форму на PHP. Назад - JSON строка.

Я читаю следующие темы:

Но я уже подготовил сайт и боюсь использовать SHORTIN, потому что я не знаю, что может произойти с другими функциями wp. Я пытался использовать themes / my-theme / custom. php вместо admin- ajax. php, но у него нет контекста. Мой повар ie не работает правильно без COOKIEPATH.

Я думаю, может быть, я боюсь SHORTINT из ничего? Или что я делаю неправильно во втором варианте?

Мой код: function.php

add_action( 'wp_enqueue_scripts', 'myajax_data', 99 ); 
function myajax_data(){ 
    wp_localize_script('main', 'myajax', 
        array( 
      'url' => admin_url('admin-ajax.php'),
      'testurl' => get_home_url(null, 'wp-content/themes/my-theme/test.php')
        ) 
    ); 
}

main.js

  $('.bars-addproduct').on('submit', function (e) {
      e.preventDefault();
      $form = $(this).serializeArray();
      $.ajax({
        url: myajax.testurl, 
        type: 'POST',
        data: {
          action: "addProduct",
          form: $form,
        },
        success: function (res) { 
         console.log(res);
        }
   });
});

test.php

<?php
$name_cookie_basket = 'users_basket';
$cookies_time = time() + 60*24; //24min

    $res = '';
    $form = $_POST['form'];
    foreach ($form as $field) {
      switch ($field['name']) {
        case 'productID':
          $productID = $field['value'];
          break;
        case 'name':
          $name = $field['value'];
          break;
        case 'price':
          $price = $field['value'];
          break;
        case 'count':
          $count = $field['value'];
          break;
        case 'amount':
          $amount = $field['value'];
          break;
        case 'ownerID':
          $ownerID = $field['value'];
          break;
      }
    }
    $cookie_basket = json_decode(stripslashes($_COOKIE[$name_cookie_basket]), true);
    $products = $cookie_basket['products'];
    $isModify = false;
    $i = 0;

    if (!$isModify) {
      // если это не редактирование, а добавление
      //Сначала проверим данные
      if (((is_numeric($productID)) || ($productID == '')) &&
          ((is_numeric($price)) || ($price == '')) &&
          ((is_numeric($count)) || ($count == '')) &&
          ((is_numeric($amount)) || ($amount == '')) &&
          ((is_numeric($ownerID))) &&
          ((($amount != '') && (intval($amount) >= 0) && ($count == '')) ||   //это пополнение депозита
            (($productID != '') && (intval($count) >= 0) && ($amount == ''))
           )   
      ){
        //если все ок, добавляем
        $newProduct = [
          'productID' => $productID,
          'name' => $name,
          'price' => $price,
          'count' => intval($count),
          'amount' => intval($amount),
          'ownerID' => $ownerID,
        ];
        // add_row('bars_products', $newProduct, 'user_' . strval($current_user->ID));
        array_push($products, $newProduct);
        $res .= 'success added'."\n";
      } else {
        //если не ок
        $res = 'fail';
      }
    }
    $cookie_basket['products'] = $products;

    $success = setcookie($name_cookie_basket, json_encode($cookie_basket), $cookies_time, '/');
    if ($success) {
      $res = json_encode([$products]);
    } else {
      $res = 'fail';
    }

    echo $res;
    wp_die();
// }

1 Ответ

0 голосов
/ 28 февраля 2020
In js file change the ajax code



$('.bars-addproduct').on('submit', function (e) {
      e.preventDefault();
      var form = $(this).serializeArray();
      $.ajax({
        url: 'websitelink/ajax.php?callToAjax=true', 
        type: 'POST',
        data: {
          action: "addProduct",
          form:  form,
        },
        success: function (res) { 
         console.log(res);
        }
   });
});

In ajax file add below code 
  // ajax call for save imap setting page
if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'addProduct'){
   print_r($_POST);
     die;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...