加载对话框内容并传递变量

有好几天,我无法弄清楚如何为以下问题设计解决方案:我有很多项目(大约1300个)存储在数据库中,每个项目都有自己的“id”,一些“name”和第三个属性“已启用”。

我想在同一页面上显示用户链接到(所有)对话框。 然后,对话框将显示“名称”并允许用户选择确定/取消(即启用/不执行)。 (更改“启用”是通过文件some_file.php进行的,该文件已经正常工作并且不受此问题的影响。)

我发现了类似这样或者类似的问题,但是其中任何一个都不需要在php和javascript之间传递变量,就像我的对话框一样。

我无法在评论中解决下面提到的问题:

JavaScript的:

$(function(){ $('#dialog').dialog({ autoOpen: false, width: 600, modal: true, buttons: { 'Cancel': function() { $(this).dialog('close'); }, 'OK': function() { $.ajax({ url: 'some_file.php', type: 'POST', data: 'item_id=' + id,// here I need to pass variable, ie $line["id"] from the php loop }); $(this).dialog('close'); } } }); $('.link_dialog').click(function(){ $('#dialog').dialog('open'); return false; }); });` 

html + php:

  Dialog 1 Dialog 2 Dialog 3 
// not sure here how to extract the "text" from javascript function created above

jsfiddle演示 (当然,不工作)

如果有人看到了这一点,我将非常感谢你的帮助。 你可以更新我的jsfiddle。

在PHP中:

 Dialog $i"; } 

HTML:

  

在Javascript中:

  var DIALOG_TEXT = ; //Pass text via JSON $('.link_dialog').click(function() { var link = this; //Get link ID var link_id = link.attr('id').split('-'); //Split string into array separated by the dash link_id = link_id[2]; //Second array element should be the ID number var msg_text = DIALOG_TEXT[link_id]; //Retrieve associated text //Insert text into dialog div $('#dialog').text(msg_text); //Use .html() if you need to insert html $('#dialog').dialog({ buttons: { "Cancel": function() { $(this).dialog('close'); }, "OK": function() { $.ajax({ url: 'some_file.php', type: 'POST', data: 'item_id=' + link_id, //Use link id number extracted above }); $(this).dialog('close'); } } }); return false; }); 

我没有测试过上面的内容,你可能需要根据自己的需要进行修改。

方案2:

如果您打算动态生成对话框内容(例如,仅当用户单击链接时),您可以执行以下操作

 jQuery('#dialog').load('content_generator.php?item_id=**[your id]**').dialog('open'); 

其中’content_generator.php’获取给定的id并输出相应的文本,“。load()”插入到对话框中。

选项2基于Sam 在这里给出的答案

您要做的是称为动态内容加载。 我的最后一个例子是通过插入必要的数据(作为JSON)并直接在页面上生成内容来实现的。

下一个方法可能不适合您尝试执行的操作,但稍后可能会有用。

我们使用外部页面为我们提供内容,而不是检索数据并在页面上生成内容。 这通过仅提供所需内容来减少服务器负载,并且可以增加用户交互性(因为页面在向用户显示之前不必加载所有信息)。 有关AJAX的更多信息,请参见[此处] [1]。

优点:将内容生成与用户访问的页面分开。 如果您需要在网站上的其他地方显示相同/类似的内容,该怎么办? 此方法允许您重用多个用例的代码。

您甚至可以将它与之前的方法结合使用。 只需使用一个单独的PHP文件来生成对话框内容和链接(而不是每次单击,如下所示),它将被调用并加载到$(document).ready()

每个点击示例:

生成每次点击的内容

一个单独的PHP文件 – dialog_text_generator.php:

 Number $item_id does not have any name.

"; } else { echo "

The name of number ".$item_id." is ".$current_item['name']."

"; } } ?>

主页中的Javascript: