chrome中的jQuery加载函数形式

时间:2013-07-31 16:36:37

标签: jquery html ajax forms google-chrome

我有一个带有添加用户按钮的用户页面。 当用户单击添加用户按钮时,将调用Ajax load()函数,该函数将加载adduserform。当在Firefox中时,IE可以正常工作。

但是,在chrome中,jQuery Dialog加载时没有错误,但是表单标记没有加载。

jsFiddle with the front

<form id="adduser">
    <select id="ptsiid" name="ptsiid" onchange="secondarySiteDisplay();">
        <option value=""></option>
        <option value="1666">London</option>
        <option value="1544">NYC</option>
    </select>First Name:
    <input type="text" name="firstname" value="" size="15" maxlength="60">Last Name:
    <input type="text" name="lastname" value="" size="15" maxlength="60">Job Title:
    <input type="text" name="jobtitle" value="" size="20" maxlength="40">E-mail:
    <input type="text" name="email" value="" size="40" maxlength="128">Can Login?
    <td class="data" align="left">
        <input type="checkbox" name="canlogin">
    </td>Is Deleted?
    <td class="data" align="left">
        <input type="checkbox" name="isdeleted">
    </td>Change Password?
    <td class="data" align="left">
        <input type="checkbox" name="changepassword">
    </td>
    <input class="button" type="button" value="Update" onclick="doAjaxSubmit();" accesskey="">
</form>

3 个答案:

答案 0 :(得分:3)

你的问题就在这一行

jQuery('#popup').load("form.html", showDialog);  

Chrome会强制执行same origin policy,这意味着您的请求将不会被加载,因为它的来源与页面中的其他元素不同。

jQuery's load method上的文档也提到了这一点。

您可以找到有关域名herehere的更好说明。从前一个链接引用的这一段在我看来很好地描述了它。

  

跨站点HTTP请求是来自a的资源的HTTP请求   不同的域而不是发出请求的资源的域。   例如,从域A加载的资源(http://domaina.example)   例如HTML网页,在域B上请求资源   (http://domainb.foo),例如图像,使用img元素   (http://domainb.foo/image.jpg)。这在网络上非常常见   今天 - 页面以跨站点方式加载大量资源,   包括CSS样式表,图像和脚本以及其他资源。

截至今日(2013年8月)this is an open issue in Chrome

最后,这就是为什么你的代码在chrome中不起作用的原因。

编辑:

Here is a workarround for Chrome.只要您不尝试使用file:// schema加载本地文件,它就会起作用。

编辑,第二部分:

我不确切知道你要做什么,但由于form.html只包含一个表单,你可以把它放在你的头版内。这样你就不必加载外部html。 它改变了你做事的方式(它没有加载外部页面),但它在chrome中工作。我还在IE,Safari和Opera中测试过它。无论您决定使用哪种浏览器,它都应该正常工作。

带有工作代码的

Here's a fiddle

编辑,第三部分:

我认真地建议你坚持上述方法,但......

...如果您确实需要将内容放在外部页面中,并且使用的是php或.NET,则无法使用ajax从服务器获取页面并将其发布到div中。它有点复杂。基本上,您需要在服务器端代码中使用一种方法,该方法将网页作为局部视图提供。 在.NET中你会写这样的东西。

public PartialViewResult getForm()
{
   return PartialView("form.html");
}

我不熟悉PHP,但代码应该类似。 您还需要一个javascript函数来获取内容并将其放在包含div中:

function loadFrame()
{
    $.ajax({
    url: "@Url.Action("getForm","Form")",
    async: false
    }).done(function( data) {
    $("#popup").append(data);
    // we don't want to show the frame until the user has clicked on the button.
    // so we make it invisible.
    $("#popup").css("display","none"); 
    });
}

答案 1 :(得分:2)

以下是JSFiddle中缺少的内容。

1)您错过了添加 jQuery 库。

2)也错过了添加 jQuery UI

3)因为你已经将你的代码包装在 load 中,

function addeditUser() {
  jQuery('#popup').load("form.html", showDialog);  
  alert(jQuery('#popup').text());
}

这不起作用。

而是像这样使用

addeditUser = function () {
  jQuery('#popup').load("form.html", showDialog);  
  alert(jQuery('#popup').text());
}

将其包裹在 head

检查JSFiddle

答案 2 :(得分:0)

这可能有助于您尝试这个

尝试将代码包装在$(document).ready()

$(document).ready(function(){
   $("#getit").load("form.html #getdiv");
});