2012-10-28 135 views
-1

所以,基本上我試圖實現: 在index.php 我會輸入產品代碼來搜索產品信息和它的圖像(該查詢運行在open_first.php中,通過ajax post請求調用)。 它的工作原理只是完美..ajax請求中的Ajax請求失敗 - 重新加載整個頁面

當open_first.php被加載時,它會顯示我一些圖片,我可以從中選擇(當我點擊圖片,它的相應的複選框得到的託運包含圖像ID)。 這也適用,很好。

但是, 如果我在字段中輸入代碼:「productCodeCopy」並點擊「confirmCodeCopy」 - 按鈕重新加載整個頁面,我的意思是index.php,我輸入的所有內容都會丟失,而我再次回到起點。我不明白爲什麼它這樣做。我想這與事實有關,第二個Ajax請求是由動態創建的頁面(open_first.php)創建的?我是否錯過了我應該發佈的內容?或者是什麼問題,這讓我非常沮喪,因爲我已經嘗試了幾個小時來解決這個問題。

說明: Jquery被加載到index.php,open_first.php和open_second.php中,我剛剛忽略了這一點,以使代碼更簡單。

文件:index.php文件(以下簡稱 「起點」)

<!-- head --> 
<script type="text/javascript"> 
$(document).ready(function() { 
$("#confirmCode").on('click', function(){ 
    var productCode = $("#productCode").val(); 
    $.ajax({ 
     url: 'open_first.php', 
     type: "POST", 
     data: ({code: productCode}), 
     success: function(data){ 
      $("#found").html(data); 
     }, 
     error: _alertError 
    }); 
    function _alertError() { 
     alert('error on request'); 
    } 
    }); 
}); 
</script> 

<!-- body --> 
<input type="text" class="textfields" id="productCode" name="productCode" value="YT-6212"> 
<input type="button" class="admin-buttons green" name="confirmCode" id="confirmCode" value="Search"> 
<div id="found"></div> 

FILE open_first.php

<script type="text/javascript"> 
    $(function() { 
     $("#foundImage").on('click', function(){ 
      $('#foundImage').toggleClass("foundImage-selected foundImage"); 
      var myID = $('#foundImage').data('image-id'); 
      var checkBox = $('input[id=selectedImages-'+myID+']'); 
      checkBox.prop("checked", !checkBox.prop("checked")); 
     }); 

     $("#confirmCodeCopy").on('click', function(){ 
      var checkedItems = $('input:checkbox[name="selectedImages[]"]:checked');     
      // this code here reloads the whole page/view (as in "index.php") 
      $.ajax({ 
       url: 'open_second.php', 
       type: "POST", 
       data: ({checked: checkedItems, copyTo: productCodeCopy, code: "<?php echo $_POST['code']; ?>"}), 
       success: function(data){ 
        $("#copyToProducts").append(data); 
       }, 
       error: _alertError 
      }); 
      /* 
      // the code below runs just fine when I hit the button "confirmCodeCopy" 
      alert('Fuu'); 
      return false; 
      */ 
     }); 

     function _alertError() { 
      alert('error'); 
     } 
    }); 
</script> 
<!--BODY--> 
<!-- these are dynamically generated from php, just to simplify we have checkbox that contains value "1" to be posted in ajax --> 
<div class="foundImage" id="foundImage" data-image-id="1"><img src="image.jpg"><input type="checkbox" id="selectedImages-1" name="selectedImages[]" value="1" style="display: none;"></div> 
<label for="productCodeCopy">Products code</label> 
<input type="text" class="textfields" id="productCodeCopy" name="productCodeCopy"> 
<br /><br /> 
<label for="confirmCodeCopy">&nbsp;</label> 
<input type="button" class="admin-buttons green" name="confirmCodeCopy" id="confirmCodeCopy" value="Search"> 
<div id="copyToProducts"></div> 

open_second.php只打印出目前POST變量,所以沒有什麼特別的呢。

求解

好吧,我解決了它。有了達姆達姆的幫助。

我刪除的行:

$('input:checkbox[name="selectedImages[]"]:checked'); 

而將此添加:

var checkedItems = new Array(); 
var productToCopy = $('#productCodeCopy').val(); 
$("input:checkbox[name=selectedImages[]]:checked").each(function() { 
    checkedItems.push($(this).val()); 
}); 

由於沒有表單元素存在,它沒有除非「手動檢索」通過獲取字段值。 VAL()函數..愚蠢的我..

我不知道有多少受此影響,但我也改變了:

data: ({checked: checkedItems, copyTo: productCodeCopy"}) 

data: {"checked": checkedItems, "copyTo": productToCopy} 

所以現在工作得很好:)酷!

+2

你的按鈕住在FORM元素裏面嗎?如果是,你還可以將它添加到代碼示例 – kabaros

+0

也確定open_second.php返回數據,而不是HTTP重定向或什麼? – kabaros

+0

嗨 頁面上沒有任何表單元素,它只是打印出變量,但我試圖只在文件中加上「Hello」這個詞,但沒有任何效果:) – user1780583

回答

1

當您將事件處理程序的按鈕或鏈接做阿賈克斯......總是防止點擊的瀏覽器的默認處理該元素

上有2種方式。無論是使用preventDefault()或從處理程序返回false

$("#confirmCodeCopy").on('click', function(event){ 
    /* method one*/ 
    event.preventDefault(); 
    /* handler code here*/ 

    /* method 2*/ 
    return false; 

}) 

同樣是添加提交處理程序的形式做表單數據阿賈克斯,而不是形式重定向到它真正的行動網址

+0

它不起作用,我早些時候嘗試過: )它仍然重新加載頁面:( (我可能已經離開了那個代碼,但是從原來的代碼中刪除了它,因爲它沒有這樣做的伎倆..) – user1780583

+0

然後你沒有顯示所有的代碼在瀏覽器控制檯中查找錯誤 – charlietfl

0

代碼$('input:checkbox[name="selectedImages[]"]:checked');返回undefined使ajax調用中的json數據無效。檢查你的選擇。

+0

好的..我試圖刪除複選框和所有對它們的引用它代碼。現在我得到一個Jquery錯誤:「NS_ERROR_XPC_BAD_CONVERT_JS:無法將JavaScript參數「。我使用Mozilla。在IE中它說:」堆棧溢出在第2行「..有趣的... – user1780583

+0

所以現在基本上我只發佈..試圖發佈值e在字段中:「productCodeCopy」 – user1780583