【问题标题】:Issue with HTML being returned in a $.ajax在 $.ajax 中返回 HTML 的问题
【发布时间】:2013-02-13 22:07:53
【问题描述】:

大家好,我有以下代码:

 $(document).ready(function () {        
    $(".atf-submit").click(function () {
            atf_name = $(this).parent().parent().find(".user_table");
            atf_amount = $(this).parent().parent().find(".user_atf");
     runATFinsider();
    });
});
function runATFinsider(){
        var urlatfinsider = '/pcg/ATF/updateATF_window.php';
        var tagatfinsider = $("#insider_dialog");

        var promise1a = showUrlInDialogATFinsider(urlatfinsider);
        var promise2a = sendUpdateATFwindow();

        $.when(promise1a, promise2a).done(function(data1, data2) {

            tagatfinsider.html(data1[0]).dialog({
              width: '100%',
              modal: true
            }).dialog('open');
           //$('.updaterATF_outerbody').text(data2[0].atfName),
           //$('.updaterATF_outerbody').text(data2[0].atfAmount)
           //alert(data2[0].atfname);
           console.log(data2);
        });
    }
    function showUrlInDialogATFinsider(urlatfinsider)
    {
      return $.ajax({
        url: urlatfinsider
      });
    }
    function sendUpdateATFwindow()
{
  return $.ajax({
    data: {
        'atfName': atf_name.val(),
        'atfAmount': atf_amount.val()
    }
  });
}

看看顶部,假设atf_nameatf_amount 的值是'joe and 0' 当我执行console.logalert(data2[0].atfName) 它不存在?它没有定义,当我执行 console.log(data2) 时,代替值应该是表的大量 HTML 以及所有值的来源。我不知道为什么会发生这种情况,这没有任何意义,因为当我这样做 alert(aft_name.val()) 时,我会得到正确的值?

如果您能帮帮我,我将不胜感激。当对话框窗口已经打开并且打开另一个对话框窗口时,此代码也会运行。我认为这应该不是问题。

大卫

这是 HTML:

<input type='hidden' class='user_table' value='$memusername'/>
<input type='hidden' class='user_atf' value='$memATF'/>

这些都在表格内。

【问题讨论】:

  • 你在哪里alert(data[0].atfName)
  • 我会做 alert(data2[0].atfName in the .$when)
  • 如果你能把你的js和html放在jsfiddle.net上,调试起来会容易很多。
  • @DavidBiga 它未定义,因为您的 ajax 请求没有返回它。
  • @KevinB 我该如何解决这个问题?

标签: javascript jquery html jquery-ui dialog


【解决方案1】:

将此作为答案,因为我指出您不需要通过 ajax 调用来获取 cmets 中 atf_nameatf_amount 的值到您的解决方案。为了尽量减少对代码的更改,我的建议是将sendUpdateATFwindow() 更改为:

function sendUpdateATFwindow() { 
    return {'atfName': atf_name.val(), 'atfAmount': atf_amount.val()}; 
} 

【讨论】:

    【解决方案2】:

    不确定,但我已经完成了这样的 jQuery AJAX 返回值:

        $.ajax({
            type: "POST", 
            url: url, 
            data: 'string'
        }).done(function(returnVar) {
            /* Do something with returnVar*/
        });
    

    老实说,我不知道这是否会有所帮助,但这是我个人使用的。

    编辑:

    AJAX 文件中的返回也必须发送出去。我主要处理PHP文件,所以我只是这样做

    ECHO $myVariable;

    【讨论】:

    • 是的,我需要为这个使用 $.when,所以我必须退回它。
    • Gotcha o'well :-) 我没有别的事可做,所以我会四处挖掘并进行一些研究,看看是否有任何发现。如果没有别的,它也可以帮助我学习。
    【解决方案3】:

    嘿伙计们,我想通了。我实际上需要创建一个单独的文件来返回发送的值,所以我只是创建了这个:

    $name_ATF = trim( $_POST['atfName'] );
    $amount_ATF = trim( $_POST['atfAmount'] );
    
    
    $returnArray = array( 'atfName' => $name_ATF, 'atfAmount' => $amount_ATF);
    
    echo json_encode($returnArray);
    

    工作得很好。感谢大家的辛勤工作!

    大卫

    【讨论】:

    • 为什么要发送额外的请求以返回可以直接从页面中提取的值?除非您将值存储在服务器上或某处的数据库中,否则此请求是不必要的。
    • 我不知道该怎么做@derekaug 你能告诉我吗?
    • 您应该能够将sendUpdateATFwindow() 函数更改为此。 function sendUpdateATFwindow() { return {'atfName': atf_name.val(), 'atfAmount': atf_amount.val()}; }。这样您就不会发送请求以返回您发送给它的值。
    • @derekuag 成功了……你想放遮阳篷,我会告诉你重点的! :)
    猜你喜欢
    • 2013-05-11
    • 1970-01-01
    • 2016-02-21
    • 2017-09-25
    • 2012-06-08
    • 2014-10-31
    • 2015-06-01
    • 2016-07-01
    • 2015-12-28
    相关资源
    最近更新 更多