0

データをjson配列として別のphpファイルに投稿するajaxを使用してフォームを作成しました。フォームを php ハンドラーに投稿するためのマークアップ ajax は次のとおりです。

$.ajax({
   dataType: "json",
   type: "post",
   url: "ajax.php?action=add_driver",
   data: $("form#addDriver").serialize(), // serializes the form's elements.
   beforeSend: function()
   {

$('.error, .success, .notice').remove();

},
success: function(json)
{

if (json['status']=='success'){
    alert(json['message']);
    }else{

if(json['error']['driver_firstname']){
    $("input[name=driver_firstname]").after('<div class="error">'+json['error'['driver_firstname']+'</div>');   
}

if(json['error']['driver_surname']){
    $("input[name=driver_surname]").after('<div class="error">'+json['error']['driver_surname']+'</div>');  
}
if(json['error']['driver_dob']){
    $("input[name=driver_dob]").after('<div class="error">'+json['error']['driver_dob']+'</div>');  
}

if(json['error']['driver_address']){
    $("input[name=driver_address]").after('<div class="error">'+json['error']['driver_address']+'</div>');  
}

if(json['error']['driver_postcode']){
    $("input[name=driver_postcode]").after('<div class="error">'+json['error']['driver_postcode']+'</div>');    
}

if(json['error']['driver_city']){
    $("input[name=driver_city]").after('<div class="error">'+json['error']['driver_city']+'</div>');    
}

if(json['error']['driver_county']){
    $("input[name=driver_county]").after('<div class="error">'+json['error']['driver_county']+'</div>');    
}

if(json['error']['driver_email']){
    $("input[name=driver_email]").after('<div class="error">'+json['error']['driver_email']+'</div>');  
}

if(json['error']['driver_tel']){
    $("input[name=driver_tel]").after('<div class="error">'+json['error']['driver_tel']+'</div>');  
}

if(json['error']['driver_mobile']){
    $("input[name=driver_mobile]").after('<div class="error">'+json['error']['driver_mobile']+'</div>');    
}   

//These are the series of validation checks carried out before submission//


}
                     });

これは、url で指定されたファイル ajax.php に渡されます。このファイルは、php 検証を使用してエラーをチェックし、問題がなければデータベースに挿入することになっています。この部分のコーディング マークアップは次のとおりです。

<?php
$json = array();


if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {

//for the first field only//            
$driver_firstname = tep_db_prepare_input($HTTP_POST_VARS['driver_firstname']);

if (strlen($driver_firstname)<4){
  $json['error']['driver_firstname'] = 'First Name is required!';
}

if (isset($json['error']) and !empty($json['error'])){

    $json['status'] = 'error';
    $json['message'] = 'Please check your error(s)!';

}else{


     $sql_data_array = array('driver_firstname' => $driver_firstname);

     tep_db_perform(TABLE_DRIVERS, $sql_data_array);

     $driver_id = tep_db_insert_id();

     $json['status'] = 'success';
     $json['message'] = 'Data has been successfully updated!';
    }

}

     echo json_encode($json);

?>

何らかの理由で、ブラウザから php ファイルに値が送信されず、空の配列が表示されます。「get」タイプを使用すると機能します。「投稿」タイプで機能しない理由を教えてくれる人はいますか? ajax.php 部分が必要な場合はお知らせください...

4

2 に答える 2

1

$HTTP_POST_VARSは非推奨であり( 11 年以上前に使用を停止する必要がありました)、PHP の私のコピーでの簡単なテストでは動作しませんでした。を使用し$_POSTます。

于 2013-02-19T14:26:53.920 に答える
1

Use .serializeArray() instead of .serialize to do what you want.

http://api.jquery.com/serializeArray/

Sample Result:

[{name: "a", value: "1" }, {name: "b", value: "2" }, {name: "c", value: "3"}, {name: "d", value: "4" }, {name: "e", value: "5" }]

http://api.jquery.com/serialize/

Sample Result:

a=1&b=2&c=3&d=4&e=5

Code should look closer to this. Use .done and catch return data in the function.

JS:

$.ajax({
    type: "POST", 
    url: "ajax.php?action=add_driver", 
    dataType: "json",
    date:  $("form#addDriver").serializeArray(),
    beforeSend: function() {
        $('.error, .success, .notice').remove();
    }
}).done(function(json) {
    if (json['status']=='success'){
        alert(json['message']);
    }else{
        if(json['error']['driver_surname']){
           /* Do Stuff */ 
        }
    }
});

PHP:

<?php
$myData = array();
$json = array();

if(isset($_POST['yourData'])){
    $myData = $_POST['yourData'];
}

/* Do stuff */
$json['myValue'] = $myData['passedValue']; 


echo json_encode($json);
?>
于 2013-02-19T15:17:07.413 に答える