2012-01-10 51 views
4

我有一個HTML按鈕:PHP到jquery dialog()的交互問題。

<button id="monitor" onclick="startMonitor('<?php echo $result_cameras[$i]["camera_hash"]; ?>', '<?php echo $result_cameras[$i]["camera_name"]; ?>', '<?php echo $camera_quality_flash; ?>');">Monitor</button> 

這將加載Flash內容:

<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script> 
<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js"></script> 
<script type="text/javascript"> 
var js = jQuery.noConflict(); 

var startMonitor = function(cameraHash, cameraName, cameraFlashQuality) { 
var url = ['flash/app.php?user=<?php echo $id_hash; ?>', 'camera=' + cameraHash, 'name=' + encodeURIComponent(cameraName), 'quality=' + cameraFlashQuality].join('&'); 
js('<div></div>').load(url, function() { 
    js(this).dialog(); 
}); 
}; 

我想使用jQuery的對話框中打開此內容。傳入的所有內容似乎都很完美(根據螢火蟲的GET迴應),但我仍然遇到jquery錯誤。

missing ; before statement jquery.js line 612

我在做什麼錯?我甚至不知道如何調試。提前致謝。

編輯: Firebug報告GET爲:http://myurl.com/flash/app.php?user=dee8c751cfdd2b5fb8194a3a9bac12044621df3d&camera=8f753c6bb3a8d9852a220abff0ed0d7686563007&name=test22&quality=0。我期望這些價值。

如果我將這個URL粘貼到我的瀏覽器中,Flash應用程序就像預期的那樣在瀏覽器中啓動,但顯然不是與jquery對話框。必須是我的jQuery代碼錯了嗎?

+0

對於初學者來說,錯誤在612行,你在這裏提供的沒有612行;返回的內容真的是什麼樣的?那條線是什麼?此外,這裏很難說,但在使用JavaScript代碼之前,它看起來並不像是在正確地清理所有這些內容。 – Kato 2012-01-13 15:04:27

+0

這是jquery.js中的一行:'window [「eval」] .call(window,data);'。不知道你想看到什麼與返回的內容。你想在Firebug的服務器響應的轉儲? – Tom 2012-01-13 15:23:47

+0

嘗試將js('

')更改爲您的目標EX:$('#result')。load( – 2012-01-17 23:20:01

回答

7

(不正確的答案被刪除。)


編輯:

起初,我誤解了jquery.js爲您創建了一個文件,而不是真正的jQuery。在測試完代碼後,我可以看到您發送的數據可能是問題。您可以發佈樣品數據爲$result_cameras[$i]["camera_hash"]$result_cameras[$i]["camera_name"]$camera_quality_flash$id_hash?另外,結果是url的值是多少?


解決方案:

的按鈕提交表單,並在頁面重新加載。該對話框顯示,但隨後該頁面立即重新加載,所以它似乎從未有過對話。爲了防止這種行爲,按鈕的click()函數必須返回false(如果沒有返回值,則將其視爲true結果)。這個解決方案

注:

  1. 依賴於存在作爲對象,讓我感動一個ready()事件中的一切。
  2. 假設這是循環中的許多按鈕中的一個(因爲PHP代碼中的$i變量),所以數據位於按鈕的屬性中。
  3. 由於可能有幾個按鈕具有相同的功能,因此可以推廣爲倍數。
  4. jQuery加載命令(cf.,http://api.jquery.com/load/)需要3個paramenters:
    • 鏈接
    • 一些數據
    • 當負載返回(如果只提供2個參數,第二個被假定爲回調函數的回調函數)。回調參數是:
      • responseText的,所述HTML從服務器
      • textStatus,狀態消息中返回
      • 的XMLHttpRequest,請求接口,其可用於以查看有關的各種信息請求(參見,http://www.w3.org/TR/XMLHttpRequest/

的HTML測試文件:

<html> 
<head> 
<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script> 
<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js"></script> 
</head> 
<body> 
<form> 
    <?php 
     $i = 0; 
     $result_cameras = array(array("camera_hash" => "test1", "camera_name" => "test2")); 
     $camera_quality_flash = 1; 
     $id_hash = "hashish"; 

     echo '<button id="monitor1" class="monitor" camHash="' . $result_cameras[$i]["camera_hash"] . '" camName="' . $result_cameras[$i]["camera_name"] . '" camQual="' . $camera_quality_flash . '" >Monitor 1</button>'; 
     echo '<button id="monitor2" class="monitor" camHash="' . $result_cameras[$i]["camera_hash"] . '-2" camName="' . $result_cameras[$i]["camera_name"] . '-2" camQual="' . $camera_quality_flash . '-2" >Monitor 2</button>'; 
    ?> 
    <div class="tester">TEST DIV</div> 
</form> 
</body> 

<script type="text/javascript"> 
    var js = jQuery.noConflict(); 
    js(document).ready(function(){ 

     var monitor = js(".monitor"); 
     //alert(monitor[1]); 

     monitor.each(
      function(i){ 
       js(this).click(
        function(){ 
         //alert(js(this).attr('camHash')); 
         startMonitor( 
          js(this).attr('camHash'), 
          js(this).attr('camName'), 
          js(this).attr('camQual') 
         ); 
         return false; 
        } 
       ); 
      } 
     ); 

     var startMonitor = function(cameraHash, cameraName, cameraFlashQuality) { 

      var url = [ 
        'flash/app.php?user=<?php echo $id_hash; ?>', 
        'camera=' + cameraHash, 
        'name=' + encodeURIComponent(cameraName), 
        'quality=' + cameraFlashQuality 
       ].join('&'); 

      js('<div>TEST DIV 2</div>').load(url 
       , function(response, status, xhr) { 
        js('.tester').text("<div>xhr: <br />" 
         + xhr.status + "<br />" 
         + xhr.statusText + "<br />" 
         + xhr.getAllResponseHeaders() + "<br />" 
         + xhr.responseText + "<br />" 
         + xhr.responseXML + "<br />" 
         + "</div>" 
        ); 
//     js(this).dialog(); 
       } 
      ); 
     }; 
    }); 
</script> 

</html> 
+0

)您在原始帖子中查看的是所有jquery代碼。開始發佈傳遞給這個'startMonitor'函數的php代碼,但是我可以從螢火蟲的GET響應中看到,所有內容都可以通過,感謝您閱讀此內容 – Tom 2012-01-14 02:55:59

+1

請參閱上面的編輯 – iND 2012-01-14 04:24:11

+0

已添加,請參閱編輯原始文章。 – Tom 2012-01-15 02:47:36

0

你能否證實你展示返回內容是實際的內容? 如果是這樣,它是不正確的,因爲它包含PHP標籤。

如果這是從您的服務器端代碼複製的,請您張貼您從服務器獲得的ACTUAL響應,因爲這很可能是您的問題所在。

謝謝