jCart をショッピング カートとして使用しています。jCart から変数を取得できます$subtotal
。
ただし、ショッピング カートで何かを変更しても、変数$subtotal
はページがリロードされるまで変更されません。
jQueryを使用$subtotal
してページクリックで更新することは可能.click(function())
ですか?
質問にはそもそも欠陥があります。
PHP はサーバー側で実行されます。すべての PHP が完了すると、ブラウザーに表示され、すべての変数がなくなります。それらのいくつかをエコーしている可能性があるため、それらはリテラル形式で「そこに」ありますが、更新する PHP 変数はもうありません。
PHP を使用する前に入力した JavaScript 変数や、PHP によって設定された HTML 値など、何かを更新できます。これはリロードによって行うことができます。または、AJAX ポスト、次に PHP マジック、次に return + assign を使用して行うこともできますが、PHP 変数を置換/リロードすることはありません。
ページをブラウザに送信した後は何もない$subtotal
ことを理解することは非常に重要です。サーバー側とクライアント側を比較してください。
ここでajax投稿の例のJSFiddleを作成しました(ページのリロードなし):http://jsfiddle.net/5RjUt/1/
JQUERY
$("#button").click(function(){ // click function fired
var subtotal = $("#subtotal").val()
var dataString = 'subtotal=' + subtotal;
$.ajax({ // ajax post
type: "POST",
url: "YOUR_PHP_PAGE.php", // post data to this URL
data: dataString,
cache: false,
success: function(html){ // this is where you can set a success callback
$("#subtotal").val("You're new value");
}
});
return false; // this tells the page not to refresh
)};
しかし、ここにいくつかの提案があります。
Web ページに表示されている値を更新する必要がある場合、たとえば、Web ページに表示される値を増減するだけでよい場合subtotal
は、サーバー側の処理なしで jQuery を使用してこれを行うことができます。
var subtotal = 0;
// Add value to subtotal and update div displaying subtotal
function addToSubtotal( value ) {
subtotal += value;
$('#subtotal').html(subtotal);
}
// When DOM is loaded...
$(document).ready( function(){
// Bind onclick event to every <a class="buyme">
$('.product').on('click', 'a.buyme', null, function(e){
// Buyme link clicked, add <span class="pricetag"> value to subtotal:
addToSubtotal( parseInt( $(this).siblings('.pricetag').html() ));
});
});
</p>
<div class="product">
<a class="buyme" href="#">Add to subtotal</a><br/>
<span class="pricetag">55</span>€
</div>
<br/>
<span id="subtotal">0</span>
これを使用して JS 変数も更新できます。特に、サーバーが をチェックして返す場合に必要ですsubtotal
。この場合、実際に新しい小計値を返すのはサーバーです。
あなたのPHP変数$subtotal
は最初にデータストレージシステムから読み取られたようです$myStore = new onlineStore();
..
$subtotal
すでに利用可能で、一貫した整数値が含まれていると思います。
これにより、適切に使用されている場合は PHP 変数が更新され、 jQuery / Javascriptserver side
で使用するためにそれらが取得されます。client side
ただし、この関数はすぐに使用できるわけではなく、完全な実装の開始点としてのみ使用する必要があります。
function updateSubtotalAtServer( args ) {
$.ajax({
type: 'POST',
url: 'processing.php', // <= Request url
// Add method=ajax, we use PHP to check that value
data: $(args).serialize()+"&method=ajax",
// processing.php returned some data:
success: function(data){
// Try decoding data as JSON encoded string:
try {
dataobj = $.parseJSON(data);
} catch (e) {
dataobj = null;
}
// Check if JSON return value decoded successfully:
if (dataobj !== null) {
// Successfully decoded JSON, log values to console.
// ...update subtotal <span> to display it for user:
$('#subtotal').html( dataobj.subtotal );
console.log( dataobj );
} else {
// Result was not JSON string (server error).
}
}
});
}
// Create new object to be used as array:
var arrayobject = new Object;
// Add this value at server side to $subtotal:
arrayobject.addtosubtotal = 55;
// Then send ajax request to server:
updateSubtotalAtServer( yourvariables or array object );
// Variable that needs updating:
/* $subtotal is already available, ..read above.. */
if (isset($_POST['method']) && $_POST['method'] == 'ajax') {
// Update variables:
$subtotal += (int)$_POST['addtosubtotal'];
// Put all data together what is needed at client side:
$ajaxreply = array( 'subtotal' => $subtotal, 'othervalue' => 'FooBar' );
// Return it to browser:
echo json_encode( $ajaxreply );
// JSON reply will fail if there is any additional output after that.
exit;
}
より多くの読書/おそらく役立つ回答:
REST、フォーム、データ配列に焦点を当てたjQuery.ajaxに関する別の
回答 jQuety.ajaxに関する別の回答、サーバーからデータを取得する