2012-07-23 24 views
2

說實話我不知道如何框架這個問題,但這裏。jquery發送鍵/值配對數組到PHP

我有以下輸入字段的表單:

<input name="key[23]" type="text" /> 
<input name="key[29]" type="text" /> 
<input name="key[65]" type="text" /> 

我可以創建與jQuery的數組發送到PHP腳本,像這樣:

var new_keys = new Array(); 
$('input[name="keys[]"]').each(function() { 
    new_keys.push($(this).attr('value')); 
}); 

但是我不知道如何創建陣列時輸入字段已經有一個鍵:輸入名稱=「測試[45]」

我試圖改變我的方法使用一個S類選民而不是輸入名稱,但我不能得到鍵名。

我需要做的是將keyname及其值發送給PHP,這樣我就可以更新一個keyname等於表ID號的表。如果我不使用Ajax,這很簡單。

希望是有道理的。

編輯

<form method="post" id="add-form" class="form" onsubmit="return false;"> 
<input class="required" type="text" name="name" id="name" /> 
<input class="required" type="text" name="keys[32]" /> 
<input class="required" type="text" name="keys[65]" /> 
<textarea name="Test"></textarea> 
<input type="submit" name="submit" value="submit" /> 
</form> 

$(document).ready(function() { 
    $.fn.submitForm = function() { 
     var name = $('#name').attr('value'); 
     var new_keys = new Array(); 
     $('input[name="keys[]"]').each(function() { 
      new_keys.push($(this).attr('value')); 
     }); 

     $.ajax({ 
      type: 'POST', 
      data: { 'new_keywords' : new_keywords, 'name' : name }, 
      dataType: 'json', 
      url: 'article/scripts/article.scripts.php', 
      success: function($data) { 
       var result = $data.result; 
       var msg = $data.msg; 

       if (result == "success") { 
        formMessageDisplay(msg, result); 
       } 
       else { 
        formMessageDisplay(msg, result); 
       } 
      }, 
      error: function($data) { 
       formMessageDisplay('<?php echo AJAX_ERROR; ?>', result); 
      } 
     }) 
    } 
}); 

這是我劇本的縮減版本,。

+0

只是爲了添加,鍵名是動態的而不是靜態的。 – 2012-07-23 17:16:20

回答

1

你可以做這樣的事情應該抓住的名字字段,然後分配數組中的值。然後,您可以處理,並根據需要在PHP清理:

var new_keys = new Array(); 
$('input[name="keys[]"]').each(function() { 
    new_keys[$(this).attr('name')] = $(this).attr('value'); 
}); 
$.post('url/to/script/here.php', new_keys, function(data) { 
    // process data here on success 
}, 'json'); // expecting a json object 

有關AJAX的樣子@這進一步閱讀使用POST方法http://api.jquery.com/jQuery.post/

+0

謝謝你。但是,如果我在'new_keys'之前添加警報,則不會發生任何事情。 $('input [name =「keys []」]')似乎不匹配選擇器,因爲輸入名稱有一個鍵名。如果我將該行更改爲$('input [name =「keys [29]」]'),那麼它會將輸入字段與名稱鍵[29]匹配,並且該行將被提交。那有意義嗎? – 2012-07-23 17:57:13

+0

從你的腳本我改變了我:var var old_keywords = new Array(); $('。old-keys')。each(function(){old_keywords [$(this).attr('id')] = $(this).attr('value');});'現在是哪個工作很好 – 2012-07-23 18:49:11

+0

很高興它的工作:) – MasterGberry 2012-07-24 19:29:18

0

您可以嘗試傳遞值作爲數組和名稱作爲另一個數組,然後在PHP與array_combine()將它們結合起來,就像這樣:

var new_keys = new Array(); 
var new_names = new Array(); 
$('input[name="keys[]"]').each(function() { 
    new_keys.push($(this).attr('value')); 
    new_names.push($(this).attr('name')); 
}); 

//Then in PHP 
$complete_array = array_combine($new_names, $new_keys); 
0

只是爲了澄清,你有一個表格,要通過javascript/ajax將值發送到一個PHP腳本?

如果是這樣的話,那麼你就會有類似:

HTML:

<form id="myForm" action="phpScript.location" method="post"> 
    <input/>... 
    <input/>... 
</form> 

的Javascript/jQuery的:

$('form').bind('submit', function() { 
     $.ajax({ 
      url: 'phpScript/location', 
      data: $('form').serialize(), // This will give you the needed key/pair parameterization you need. 
      type: 'POST', 
      dataType: 'html', // This can be one of many values. Just defines the expected response type. 
      success: function(data, status, xhr) { 
       // Success response 
      }, 
     }); 
     return false; 
    }); 

序列化的文檔在這裏:http://api.jquery.com/serialize/

+0

我試圖序列化字段像這樣︰var old_keywords = $('。old-keys')。連載();這將使用正確的類序列化輸入字段的查詢字符串,但它不包含具有鍵名的名稱。 var keys = $('input [name =「keys []」]')。serialize();沒有工作,因爲這個鍵名不存在。 – 2012-07-23 18:09:11

+0

在PHP腳本中你期望的參數是什麼?它是一個關鍵/配對,例如:「key [##] => value」?或者你是否在尋找一個帶有一系列值的名爲'key'的參數,即:key => 1,2,4,5 ...? – aztechy 2012-07-23 18:52:07