2014-07-14 44 views
3

首先,我是一個jQuery noob和一個完整的PHP noob,所以我很抱歉,如果這是一個愚蠢的問題(儘管我已經搜索了互聯網,具體來說,這網站上下無法弄清楚我做錯了什麼)。此外,如果你看到任何其他錯誤/雜亂的代碼等,不要猶豫,告訴我:)。PHP腳本不會收到jQuery POST

我想創建一個畫廊,我有一個上一個和下一個按鈕。當你點擊previous時,img-tag的src-attribute會通過jquery更改爲上一張圖像,下一張圖像和下一張圖像也會相同。但是,當您按下上一個按鈕並且當前圖像是第一個圖像時,我希望它返回到最後一個圖像。我需要這種動態發生,因爲我有幾個這些畫廊的圖片總數不同。現在,我的當前方法是(大約):

  • 從點擊的按鈕發送方向參數到我的圖像肘節 功能(或是「向後」或「向前」)

  • 提取圖像源的文件路徑並將其發佈到外部的 PHP腳本,然後對該目錄中的文件數進行計數。

  • 檢查方向參數是否爲正向。如果是,則 將當前圖像文件名 末尾的數字加1。如果不是,則減去一個(導致名稱不存在的文件 )。這個新的文件名被分配給nextImage變量。

  • 檢查nextImage是否存在。如果是,則將其分配爲img src-attribute的 。如果沒有,請從外部 PHP腳本中獲取文件計數,將其作爲文件編號並將其實施到nextImage中,然後將其分配到src-attribute中,然後將其分配給 。

大部分工作原理。但是,在第一張圖像上點擊上一張圖像時獲取最後一張圖像不會。我已經做了一些調試,並縮小到它似乎停止工作的程度。 Firebug告訴我,jQuery POST函數可以工作(並且我也獲得了成功警報),並且它將我想要的數據發佈到PHP文件。但是,在PHP腳本中,從不輸入if (isset($_POST["id1"]))分支。它總是直接到else分支,即使我已經基本上覆制並粘貼了本網站接受的答案的整個腳本。

這裏是jQuery代碼:

var nextImageLength = " "; 
var nextImage = " "; 
var imageString = " "; 
var nextImageStr = " "; 
var nextImageNmb = 0; 

var countImageLength = function($countimagelength) { 
    nextImageLength = nextImageStr.length; 
    if (nextImageLength < 3) { 
     if (nextImageLength < 2) { 
      nextImage = imageString + '00' + nextImageStr + '.jpg'; 
     } 
     else { 
      nextImage = imageString + '0' + nextImageStr + '.jpg'; 
     } 
    } 
    else { 
     nextImage = imageString + nextImageStr + '.jpg'; 
    } 
} 

function multiPageToggle(direction) { 
    var currentImage = $(".viewport_img_high").attr("src"); 
    imageString = currentImage.slice(0, 35); 
    $.ajax(
      { 
      type: "POST", 
       url: "countImages.php", 

       data: { id1: imageString}, 
       success: function (count) { 
        //alert('success'); 

      } 
    });  
    var currentImageNmb = currentImage.slice(-7, -4); 
    if (direction == "forward") { 
     nextImageNmb = (parseInt(currentImageNmb)) + 1; 
    } 
    else { 
     nextImageNmb = (parseInt(currentImageNmb)) - 1; 
    } 
    nextImageStr = nextImageNmb.toString(); 
    countImageLength(); 
    $.get(nextImage) 
      .done(function() { 
       $(".viewport_img_high").attr("src", nextImage); 
     }).fail(function() { 
       if (nextImageNmb < 1) { 
       $.get('countImages.php', function(count) { 
        nextImageStr = count; 
       }); 
       countImageLength(); 
       $(".viewport_img_high").attr("src", nextImage); 
      } 
      else { 
       nextImageStr = "1"; 
       countImageLength(); 
       $(".viewport_img_high").attr("src", nextImage); 
      } 
     }); 
} 

這是我的PHP腳本:

<?php 
if (isset($_POST["id1"])) 
{ 
    $imgStr = $id1; 
} 
else 
{ 
    $imgStr = "1"; 
    echo "Oops. Something went really wrong here."; 
} 
$imagePath = "c:/xampp/htdocs/portfolio/images2/" + $imgStr + "/"; 
$count = iterator_count(new DirectoryIterator($imagePath)); 
echo $count; 
?> 

編輯:下面我將添加一些Firebug的數據。也許這可以幫助理解這一點。 響應頭:

Connection Keep-Alive 
Content-Length 77 
Content-Type text/html 
Date Tue, 15 Jul 2014 04:26:24 GMT 
Keep-Alive timeout=5, max=100 
Server Apache/2.4.7 (Win32) OpenSSL/1.0.1e PHP/5.5.9 
X-Powered-By PHP/5.5.9 

請求報頭:

Accept */* 
Accept-Encoding gzip, deflate 
Accept-Language de,en-US;q=0.7,en;q=0.3 
Cache-Control no-cache 
Connection keep-alive 
Content-Length 43 
Content-Type application/x-www-form-urlencoded; charset=UTF-8 
Host localhost 
Pragma no-cache 
Referer http://localhost/portfolio/index_b.php 
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0 
X-Requested-With XMLHttpRequest 

響應:

array(1) { 
    ["id1"]=> 
    string(35) "images2/des004_large_/des004_large_" 
} 
0 
+0

在你的PHP腳本,你使用'$ id1'但從來沒有設置。你的意思是'$ imgStr = $ _POST [「id1」];'? – Barmar

回答

0

好了,所以我還是不知道出了什麼問題,但我簡單地重寫了我的jQuery腳本的POST/GET部分,以及從頭開始的PHP腳本,現在它正在工作。這是我的新代碼,以防將來再次出現這種情況,並且有類似的問題。我更換了POST - $ AJAX功能與此(也改變了一些變數在我的jQuery在此期間休息,所以不要讓這種混淆你):

$.post("test3.php", {a: imageStringSlice}, function(data) { 
      //alert(data); 
    count = data - 2; 
}); 

的$不用彷徨與此。

nextImageStr = count.toString(); 
countImageLength(); 
$(".viewport_img_high").attr("src", nextImage); 

而與此PHP腳本:

<?php 
if($_REQUEST["a"]) 
{ 
    $imgstr = $_REQUEST['a']; 
    settype($imgstr, "string"); 
    $count = iterator_count(new DirectoryIterator($imgstr)); 
    echo $count; 
} 
else { 
    echo "1"; 
} 
?> 

感謝Barmar特別是對gcarvalho97幫助我了:)!

1

vardump($_POST)檢查陣列上的所有值。如果只有一個空數組,那麼您的頁面不會發布任何內容,否則它會輸出您帖子的所有內容。然後開始圍繞工作:檢查所有的存在,在你的代碼替換他們的指標;)

+0

我只是試着讀vardump,我仍然有點困惑,所以我希望我做到了這一點。我插入了「$ a = var_dump($ _ POST); echo $ a;」在if語句之前(首先用($ _POST [「id1])嘗試它,但是隻給了我一個錯誤)並且它迴應了array(0){} – FrozenHarlequin

+0

不,你只能寫'var_dump($ _POST)',你不需要將它賦值給一個變量,因爲它已經打印到輸出。 –

+0

啊,謝謝:)。我得到相同的輸出數組(0){}。這意味着PHP腳本沒有從我的jQuery函數接收數據,是否正確? – FrozenHarlequin

3

行:

$imgStr = $id1; 

應該是:

$imgStr = $_POST['id1']; 
+0

謝謝:)!我在這裏看到了兩個接受的答案,而且我嘗試了兩種方法,但都沒有成功,所以這不是我主要問題的解決方案。問題是,它甚至從來沒有達到這一點。它不會輸入positive if分支(我嘗試從那裏迴應消息,我從來沒有得到它們,但我總是從else分支中得到錯誤消息)。但還是謝謝,我會改變它:)。 – FrozenHarlequin

0

我超級遲到這個,但我最近在同一個問題上掙扎,在任何地方都找不到任何幫助。

簡單的答案是,PHP不會填充$ _POST,如果它不識別表單,但輸入仍然可用。

發帖時(在我的情況JSON數據)通過JavaScript,我通過這個拿回來從PHP:

$postbody = file_get_contents("php://input"); 

需要注意的是不等價的帖子,因爲它不被處理,所以你可能需要在這方面做很多工作。在流包裝

的更多信息,請訪問:[PHP PHP的輸入手冊] [http://php.net/manual/en/wrappers.php]