2013-01-16 66 views
1

我涉足JQuery,並且遇到了一個我還不能解決的問題。這裏是上下文:提交JQuery數組和PHP表單數據到PHP腳本

我有一個HTML表格,利用MySQL & PHP,用於編輯CMS的帖子。這篇文章會有一個附件列表(例如圖片庫或可下載的文件)。使用JQuery,用戶可以點擊這些列表項元素,並在顯示的div中編輯每個附件的詳細信息(例如,刪除圖像,添加capton等)。

當前用戶選擇刪除附件時,我只是淡化其不透明度併爲用戶提供一個新選項來「撤消」刪除。提交完整的父表單(CMS郵件)後,我想收集所有仍標記爲刪除的附件,並將其GUID提交給PHP腳本,該腳本正在爲我完成所有後續更新。

選項A:

是否有可能提出一個jQuery數組PHP腳本一起由表單輸入自然發送到動作腳本中的數據?

選項B:

是否有可能填補/空(隱藏)的形式輸入動態使用jQuery數組,然後可以用一切自然提交動作腳本?

我目前正在填充Javascript數組和必要的GUID的階段,但現在不知道如何處理它。

//populate deleted attachments array 
$(document).ready(function() { 
    $('#post-editor').submit(function() { 
    var arrDeleted = [];  
    $('.deleted-att').each(function(){ 
     arrDeleted.push({guid: $(this).attr("data-guid")}); 
    }); 
    //do something with array 
    }); 
}); 
+0

您可以使用jQuery的Ajax函數之一來發送和接收來自PHP腳本的數據。這並不複雜,jQuery提供了許多速記方法。 http://api.jquery.com/jQuery.ajax/ –

回答

2

JSON.stringifyarrDeleted,並把它們在表單的隱藏字段,將被提交。

$('#post-editor').submit(function() { 
    var arrDeleted = [];  
    $('.deleted-att').each(function(){ 
     arrDeleted.push({guid: $(this).attr("data-guid")}); 
    }); 
    $('#post-hidden').val(JSON.stringify(arrDeleted)); 
}); 

某處在您的HTML:

<form id="post-editor"> 
    <input type="hidden" id="post-hidden" name="post-hidden" /> 
    <!-- ... other fields ... --> 
</form> 

然後json_decode($_POST['post-hidden'])在服務器上獲取數組。

+0

這看起來不錯 - 它提交然後作爲一個數組,或只是一個長的字符串? 編輯:沒關係 - 只是試了一下,它的完美:) – Eamonn

+0

是的,從技術上講,它發送的字節中有一個字符串,其中有一個json編碼的數組。 :) –

1

通過jQuery的 建立在你的form..put在你輸入arrDeleted值的隱藏字段,併發布form..use json_decode()得到張貼值...

<input type="hidden" id="hidden"/> 

JQUERY

$(document).ready(function() { 
    $('#post-editor').submit(function() { 
    var arrDeleted = [];  
    $('.deleted-att').each(function(){ 
    arrDeleted.push({guid: $(this).attr("data-guid")}); 
    }); 
    $('#hidden').val(JSON.stringify(arrDeleted)); 
}); 
}); 
+0

謝謝bipen,因爲兩個答案基本相同,我會接受Emil的第一個:) – Eamonn

+0

肯定謝謝... :) ..沒問題..快樂編碼.. :) – bipen

1

最簡單的做你想要的東西將是一個隱藏的輸入字段添加到您的HTML表單

然後在jQuery的做這樣的事情

$('form').submit(function() { 
    $('#hidden_id_field').val(arrDeleted.join(',')); 
}); 

arrDeleted在這種情況下是數組您已經已經設置。它會發送一個以逗號分隔的列表,然後在您的PHP中分割值並按照您的需要進行操作。

通常我只是做AJAX併發送JSON到我的應用程序。但是,如果你真的想這樣做,上述方法將起作用。它具有的優點是,除非您提交表單,否則實際上不會刪除服務器上的任何內容。

+0

試過這個和它返回'[arrDeleted] =>數組([0] => [對象對象],[對象對象],[對象對象])...' – Eamonn

0

您可能要做到這一點與傳統的表單提交和更新,但如果你願意異步提交請求,您可以使用jQuery提交表單和序列化已刪除項目的數組:

var form = $('#post-editor'); 
form.submit(function() { 
    var arrDeleted = [];  
    $('.deleted-att').each(function(){ 
    arrDeleted.push({ // The format $.serializeArray produces. 
     name: "deleted", 
     value: $(this).attr("data-guid") 
    }); 
    }); 

    var formData = form.serializeArray(); 
    // Add values to existing form data 
    formData = formData.concat(arrDeleted); 

    $.ajax({ 
    url: form.attr('action'), 
    data: formData 
    // Other ajax options 
    }); 
}); 

在PHP方面,參考$_REQUEST['deleted']將返回一個GUID數組。

+0

這對我很有趣 - 異步提交是我想要標題,但遠遠不夠精通,因爲它現在是可靠的。至少直到我可以拼寫'異步',而不必非常認真思考:D – Eamonn