2013-10-29 39 views
1

我是一個長期的潛伏者,第一次在Stack Overflow上發佈海報(這在之前的一些編程項目中爲我省了不少)。我有一個獨特的問題,我一直無法通過搜索網站找到,所以我會在這裏描述它。來自PHP循環內的JQuery代碼的AJAX請求

我正在創建一個在線訂單表單,供用戶選擇食品類別。該類別被髮送到運行數據庫查詢的另一頁代碼,並將該類別中的所有項目返回到名爲ItemXSelect(其中X是項目編號)的下拉框。我沒有遇到過這個問題。但是,我在使用用戶在另一個AJAX查詢中爲ItemXSelect選擇的值時遇到了問題。具體來說,AJAX請求根本不會發送(根據Firebug)。我希望這是一個簡單的語法錯誤,但我已經好幾天了。

下面的代碼是在PHP Echo語句中編寫的Jquery/AJAX,並且有某些字符被轉義。 $ itemNum確定ItemXSelect中X的值。

\$(\"#Item" . $itemNum . "Select option:selected\").change(function() { 
var sel = \$(\"#Item" . $itemNum . "Select option:selected\").text()); 
    \$.ajax({ 
     type: \"POST\", 
     url: \"sizearray.php\", 
     data: { category: \"Cold_Sandwiches\" , selection: sel }, 
     dataType: \"text\" 
    }).done(function(result) { 
     \$(\"#Item" . $itemNum . "Size\").html(result); 
    }); 
    \$(\"#Item" . $itemNum . "Size\").show(); 
}); 

這一直困擾着我好幾天。我感謝所有能夠幫助我找到問題的人(甚至至少可以嘗試)。

============================================== =======================================

編輯1

謝謝爲了您的幫助,我已經通過將所有JQuery包裝在PHP EOD語句中來清理代碼。這樣,我不必逃避整個事情。以下是更新的代碼。以下建議至今尚未解決主要問題,但至少其語法更爲簡潔。

jQuery("#Item{$itemNum}Select option:selected").change(function() { 
    var sel = jQuery("#Item{$itemNum}Select option:selected").text()); 
     jQuery.ajax({ 
      type: "POST", 
      url: "sizearray.php", 
      data: { category: "Cold_Sandwiches" , selection: sel }, 
      dataType: "text" 
     }).done(function(result) { 
      jQuery("#Item{$itemNum}Size").html(result); 
     }); 
     jQuery("#Item{$itemNum}Size").show(); 
    }); 
+1

你爲什麼逃離這麼多事情? – tymeJV

+0

你應該嘗試一個[PHP多行字符串](http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc)來處理所有這些。 – lxe

+1

您可以在獲取選擇值的行上的瀏覽器中設置斷點嗎?更改事件是否正在發射? –

回答

0

所有這些行看起來很有趣。我不知道PHP,但它看起來像你有不匹配的引號。

\$(\"#Item" . $itemNum . "Select option:selected\").change(function() { 

\$(\"#Item" . $itemNum . "Size\").html(result); 

\$(\"#Item" . $itemNum . "Size\").show(); 
+0

它看起來這麼奇怪的原因是因爲當你寫一個PHP回聲聲明它看起來像這樣: 回聲「有些話之類的東西」 ,並有該聲明中引用你需要做到這一點 回聲「一些「單詞」和東西「 我將它留在你的想象中,當你在一個PHP echo語句中使用JQuery時,多少轉義引號可能會使語法變得糟糕。它變得討厭。 –

0

或者您可以在客戶端使用jQuery進行實時綁定。

編輯

在JavaScript

$('select').change(function(){ 
     alert(this.options[this.selectedIndex].value); 
    }); 

HTML

<select> 
    <option value="apple">Apple</option> 
    <option value="orange">Orange</option> 
</select> 

所以每個選擇添加(通過動態AJAX)將自動綁定到更改事件。

或者你也可以用更復雜但更不容易出錯的方法,只用JSON從服務器請求數據並用數據填充控件。

+0

我試過你的建議'jQuery(「#Item {$ itemNum} Select」)。live('change',function(){'但它沒有解決我的問題。難道是變量'sel'不正確? –

+0

$ itemNum必須是一個固定的或靜態的數字,或者所有的選擇控件都必須有一個公共屬性,您可以將它用作客戶端的選擇器。 – TheRealChx101