2014-08-29 2 views
0

У меня возникли проблемы с передачей моего массива javascript в файл php. Я знаю, что массив JS имеет правильные входные данные пользователя, потому что я тестировал это с помощью toString() и печатал массив на моей веб-странице. Мой план состоял в том, чтобы использовать отправку массива JS в мой php-скрипт с использованием AJAX, но я новичок в использовании AJAX, поэтому есть хороший шанс, что я делаю что-то неправильно. Я просматриваю много разных сообщений людей, имеющих эту же проблему, но все, что я пробовал, пока не работает. Все, что я знаю на данный момент, это то, что JS имеет данные в массиве отлично, но когда я пытаюсь передать его в php-файл через AJAX, php-скрипт не получает его. Я знаю это, потому что продолжаю получать неопределенные переменные ошибки. Чтобы быть полностью честным, я не уверен, что проблема в том, как я пытаюсь передать массив скрипту php или если он пытается запросить и присвоить значения массива переменным на стороне php. На данный момент мой код выглядит следующим образом:Передача массива javascript в php через jquery AJAX

My Javascript:

function createAsset(str, str, str, str, str, str, str, str, str) 
    { 
     var aID = assetID.value; 
     var aName = assetName.value; 
     var pPrice = purchasedPrice.value; 
     var pDate = purchasedDate.value; 
     var supp = supplier.value; 
     var cValue = currentValue.value; 
     var aOwner = actualOwner.value; 
     var wEdate = warrantyExpiryDate.value; 
     var dDate = destroyedDate.value; 

     //document.write(aID); 
     //var dataObject = new Array() 
     //dataObject[0] = aID; 
     //dataObject[1] = aName; 
     //dataObject[2] = pPrice; 
     //dataObject[3] = pDate; 
     //dataObject[4] = supp; 
     //dataObject[5] = cValue; 
     //dataObject[6] = aOwner; 
     //dataObject[7] = wEdate; 
     //dataObject[8] = dDate; 
     //dataObject.toString(); 
     //document.getElementById("demo").innerHTML = dataObject; 

     var dataObject = { assitID: aID, 
          assitName: aName, 
          purchasedPrice: pPrice, 
          purchasedDate: pDate, 
          supplier: supp, 
          currentValue: cValue, 
          actualOwner: aOwner, 
          warrantyExpiryDate: wEdate, 
          destroyedDate: dDate }; 

     $.ajax 
     ({ 
      type: "POST", 
      url: "create_asset_v1.0.php", 
      data: dataObject, 
      cache: false, 
      success: function() 
      { 
       alert("OK"); 
       location.reload(true); 
       //window.location = 'create_asset_v1.0.php'; 
      } 
     }); 
    } 

Мой PHP:

<?php 
// Get Create form values and assign them to local variables. 
$assetID = $_POST['aID']; 
$assetName = $_POST['aName']; 
$purchasedPrice = $_POST['pPrice']; 
$purchasedDate = $_POST['pDate']; 
$supplier = $_POST['supp']; 
$currentValue = $_POST['cValue']; 
$actualOwner = $_POST['aOwner']; 
$warrantyExpiryDate = $_POST['wEdate']; 
$destroyedDate = $_POST['dDate']; 

// Connect to the SQL server. 
$server='PC028\ZIRCONASSETS';    //serverName\instanceName 
$connectinfo=array("Database"=>"zirconAssetsDB"); 
$conn=sqlsrv_connect($server,$connectinfo); 

if($conn) 
{ 
    echo "Connection established.<br/><br/>"; 
} 
else 
{ 
    echo "Connection couldn't be established.<br/><br/>"; 
    die(print_r(sqlsrv_errors(), true)); 
} 

// Query the database to INSERT record. 
$sql = "INSERT INTO dbo.inHouseAssets 
     (Asset_ID, Asset_Name, Perchased_Price, Date_Perchased, Supplier, Current_Value, Actual_Owner,Worranty_Expiry_Date, Destroyed_Date) 
     VALUES 
     (?, ?, ?, ?, ?, ?, ?, ?, ?)"; 

$params = array($assetID, $assetName, $purchasedPrice, $purchasedDate, $supplier, $currentValue, $actualOwner, $warrantyExpiryDate, $destroyedDate); 

// Do not send query database if one or more field have no value. 
if($assetID && $assetName && $purchasedPrice && $purchasedDate && $supplier && $currentValue && $actualOwner && $warrantyExpiryDate && $destroyedDate != '') 
{ 
    $result = sqlsrv_query($conn, $sql, $params); 

    // Check if query was executed with no errors. 
    if($result === false) 
    { 
     // If errors occurred print out SQL console data. 
     if(($errors = sqlsrv_errors()) != null) 
     { 
      foreach($errors as $error) 
      { 
       echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br/>"; 
       echo "code: ".$error[ 'code']."<br/>"; 
       echo "message: ".$error[ 'message']."<br/>"; 
      } 
     } 
    } 
    else 
    { 
     echo "Record Created!<br/>"; 
    } 
} 

// Close server connection 
sqlsrv_close($conn); 
if($conn) 
{ 
    echo "<br/>Connection still established."; 
} 
else 
{ 
    echo "<br/>Connection closed."; 
}?> 

Так же, как дополнительная информация, если ее не видно из моего кода я пытаюсь отправить пользователю данные из html-формы в php-скрипт, которые обрабатывают его и используют для запроса базы данных MSSQL. Эта функция, над которой я сейчас работаю, - это функция создания базы данных create.

+1

ключи массива неправильно, что вы используете. –

+0

Почему вы запускаете функцию с теми же атрибутами несколько раз здесь? CreateAsset (str, str, str, str, str, str, str, str, str) '... ??? – Novocaine

+0

Я предположил, что каждое жало, которое я передавал в функцию, должно быть объявлено как параметры функции. – Yanmears

ответ

1

Вы читаете неправильные ключи.

$assetID = $_POST['aID']; 

Должно быть:

$assetID = $_POST['assitID']; 

По отправленного объекта.

2

Вы должны соответствовать ключи, отправляемые через AJAX:

var dataObject = { assitID: aID, 
          assitName: aName, 
          purchasedPrice: pPrice, 
          purchasedDate: pDate, 
          supplier: supp, 
          currentValue: cValue, 
          actualOwner: aOwner, 
          warrantyExpiryDate: wEdate, 
          destroyedDate: dDate }; 

с ключами массива POST:

$assetID = $_POST['aID']; 
$assetName = $_POST['aName']; 
$purchasedPrice = $_POST['pPrice']; 
$purchasedDate = $_POST['pDate']; 
$supplier = $_POST['supp']; 
$currentValue = $_POST['cValue']; 
$actualOwner = $_POST['aOwner']; 
$warrantyExpiryDate = $_POST['wEdate']; 
$destroyedDate = $_POST['dDate']; 

Ваш код должен выглядеть следующим образом:

$assetID = $_POST['assitID']; 
$assetName = $_POST['assitName']; 
$purchasedPrice = $_POST['purchasedPrice']; 
... 
+0

Спасибо вы очень Михай это работает сейчас, и теперь вы сказали, что я вижу, что у меня определенно был неправильный конец палки. – Yanmears

Смежные вопросы