Fancybox成功函数close()在ajax中不起作用

时间:2016-03-23 03:16:52

标签: jquery ajax fancybox

的index.php

$id = $_GET['id'];

jQuery(function ($) {
$('#btnSend').click(function(){

        var key = $('input:hidden[name=id]').val();

        $.ajax({
                url: "process.php", 
                type: "POST",
                data: { "something": "something", "id": key}, 
                success: function(response) {
                    // I'm sure do something can work //

                    $.fancybox.close();  //this not work!
                    // parent.$.fancybox.close(); // or this
                }
        }); 
    });
});


<body>  
   *edit something...*

   <input type="hidden" name="id" value="<?=$id?>">
   <input type="button" id="btnSend" value=" Submit ">
</body>

showForm.php

$id = $_POST['id']; 
$something = $_POST['something'];

$sql = "UPDATE db 
        SET 
        something           =   '{$something}',
        WHERE id = '{$id}' ";
$result = $mysql->query($sql);  

process.php

public class EntryDelish extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_entry_delish);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    Button button = (Button) findViewById(R.id.button12);
    button.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {
            Intent intent = new Intent(v.getContext(), DcDesign.class);
            startActivityForResult(intent, 0);

        }
    });

}

我可以更新我的数据,但是 $。fancybox.close();
jQuery.fancybox.close();
parent。$。fancybox.close();
所有人都无法工作......

版本:fancybox-1.3.4

PS:当我使用Ajax在samepage(index.php)中提交表单时, $ .fancybox.close(); 可以正常工作!

1 个答案:

答案 0 :(得分:0)

我发布了 jquery.fancybox-1.3.4.js https://gist.github.com/vladkras/008361d790668634db74的解压缩版本来弄清楚发生了什么。

当你的close()函数触发时,它似乎停在第926行:

if (busy || wrap.is(':hidden')) {

根据您的错误,wrap = $('<div id="fancybox-wrap"></div>')未定义。尝试将type: "iframe"放入您的fancybox选项:

$("a.edit").fancybox({
    type: "iframe"
});

现在让它,它有parent

UPD 此外,您确定需要该中间文件showForm.php吗?事实证明你做了两个ajax请求

index.php ----------> showForm.php ------------> process.php
           fancybox                     ajax

我认为你可以修改整个过程:

  1. 使用ajax
  2. 接收元素fom db
  3. 使用值上的值创建表单
  4. 使用fancybox显示您的表单
  5. 发回更改后的数据
  6. $.fancybox.close()成功