【问题标题】:Ajax Form SendingAjax 表单发送
【发布时间】:2011-07-22 13:54:18
【问题描述】:

好吧,我有点不知所措,因为 AJAX 绝对是一个薄弱环节。我有一个页面需要通过 ajax 将注册表单发送到另一个域以进行处理,然后返回成功/失败消息。

当使用下面的代码时,页面只是刷新了,什么都没有发送?

表格代码:

<form method="post" onSubmit="return submitGetApp();" class="kinkast_signup"> 
  <input id="login_email" type="text" name="to" />
  <input id="signInButtonSubmit" type="submit" name="action" value="Send" />
</form>

jQuery 代码: $('#signInButtonSubmit').click(function (e) {

    //Get the data from all the fields
    var number = $('input[name=to]');

    //Simple validation to make sure user entered something
    //If error found, add hightlight class to the text field
    if (number.val()=='') {
        name.addClass('hightlight');
        return false;
    } else name.removeClass('hightlight');

    //organize the data properly
    var data = 'number=' + number.val();

    //show the loading sign
    $('p.ajax_message').hide();

    //start the ajax
    $.ajax({
        //this is the php file that processes the data and send mail
        url: "http://video.kinkast.com/getapp", 

        //GET method is used
        type: "POST",

        //pass the data         
        data: data,     

        //Do not cache the page
        cache: false,

        //success
        success: function () {              
            $('p.ajax_message').html('Success!');
            alert('Worked!');                    

            },

        //Failure
        error: function(xhr, status, e) {
            alert(status, e);
        } 

    });

    //cancel the submit button default behaviours
    return false;
}); 

有人可以查看代码并查看我缺少的内容吗?另外,要现场观看,请访问this link

【问题讨论】:

    标签: jquery html ajax json forms


    【解决方案1】:

    您不能将 ajax 发布到另一个域。

    这是为了帮助防止诸如跨站脚本攻击(XSS 攻击)之类的事情。

    有一些可用的框架允许您执行诸如ACD 之类的操作,但在大多数情况下,我不推荐这种做法。

    更新

    这是您的代码的工作版本:http://jsfiddle.net/4tMN3/

    您会注意到一些新事物。

    首先我使用propper jQuery事件机制附加事件。

    $('#mySubmitForm').submit(function(event){})
    

    这比以实际形式硬编码事件更受欢迎。

    其次你会注意到:

    event.preventDefault();
    

    这是防止表单默认行为(即提交)而不是返回 false 的正确 jQuery 方式。

    【讨论】:

    • 甚至没有json?请记住,我的经验为零。使用 ajax / json :) - 为愚蠢的问题道歉
    • 另外,我不应该收到错误消息(使用上面的代码)而不是页面刷新吗?
    • 无论返回什么类型,都不能像这样进行跨站请求。如果您四处搜索,您会找到解决方法,但就像我说的那样,这些限制是有充分理由的。
    • 疯了!非常感谢......如果上面的代码在同一个域上,它会工作还是我错过了什么? :)
    • 它几乎可以工作。你只错过了几件事。这是您的代码的一个工作示例:jsfiddle.net/4tMN3
    【解决方案2】:

    有一些方法可以使用插件通过 jquery 发出跨域 json 请求。它使用 YQL 将页面转储作为 json 请求返回。它不是真的推荐,但如果你真的需要,你可以。这是它的链接,这里有一个指向他的 github 的最新版本的链接。我最近用它进行了一些测试,一切都很好,我马上就弄一个 JSFiddle。

    http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

    还有一个页面涵盖了通过 YQL 发布的内容: http://www.wait-till-i.com/2009/11/16/using-yql-to-read-html-from-a-document-that-requires-post-data/

    示例 JSFiddle: http://jsfiddle.net/M6X6n/1/

    【讨论】:

    • 我错过了原始帖子的主链接,对此感到抱歉!
    猜你喜欢
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多