无法从静态方法运行Javascript

无法从静态方法运行Javascript,javascript,asp.net,ajax,c#-4.0,webmethod,Javascript,Asp.net,Ajax,C# 4.0,Webmethod,我正在尝试从静态方法运行一个简单的警报脚本(打算在将来运行函数),但它不会向我显示警报(如果我在页面加载事件中执行此操作,则工作正常): 已尝试将上述脚本作为字符串返回,并在ajax方法中尝试了以下操作,但在Firebug中获得了400错误请求: var script = document.createElement( 'script' ); script.type = 'text/javascript'; script.src = result; document.body.appendChi

我正在尝试从静态方法运行一个简单的警报脚本(打算在将来运行函数),但它不会向我显示警报(如果我在页面加载事件中执行此操作,则工作正常):

已尝试将上述脚本作为字符串返回,并在ajax方法中尝试了以下操作,但在Firebug中获得了
400错误请求

var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = result;
document.body.appendChild(script);
编辑2:

我创建了这个类:

[Serializable]
    public class PixelGenericResults
    {
        public int Id{ get; set; }
        public string Script { get; set; }
    }
在我的静态方法中,我执行以下操作:

 var g = new GenericResults();
 g.Id = 2;
 g.Script = AffiliateTracking.getScript(g.Id); //This gets me the above script

 HttpContext.Current.Response.ContentType = "application/json";
 strReturn = new JavaScriptSerializer().Serialize(g);
在关于成功的aspx页面中,我做到了:

 success: function (result) {
                        if (result.hasOwnProperty("d")) { result = result.d; }
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = result.Script;
    document.getElementsByTagName('body')[0].appendChild(script);
}

但是当运行它时,我在firebug
“网络错误:404未找到-http://localhost:5822/undefined“

正如注释中所述,您不能直接与已经使用AJAX调用呈现的页面交互,因此您必须在客户端做一些工作

下面是一个基于您向我们展示的代码的示例:

c#:

JS:

我还没有测试过这个,所以它可能包含任何拼写错误,但这应该足以让您调整代码

编辑:


如何调用该方法?什么叫它?我用ajax来调用静态[WebMethod],也就是调用上面的方法..@Zaki这就是问题所在:使用ajax你不能直接在服务器端与客户端页面交互,您必须向AJAX调用返回一些值,然后通过JS在客户端执行操作来创建alert@LittleSweetSeas我可以像你描述的那样创建一个简单的警报。但是想象一下,如果我有一个大的脚本,document.write,当ajax webmethod成功后,我想注册它…一个[webmethod]对已呈现的页面没有任何影响。也不会导致呈现新页面。它所能做的就是将信息传递回客户端,客户端可以更新页面。请帮助我帮助您。现在进行一点调试并检查问题出在哪里,根据我所看到的,我可以告诉您,您的代码甚至不应该编译,因为g.RequestId未在PixelGenericResults类中声明。请在JS回调中作为第一条语句尝试“alert(result);alert(result.Id);”,为了检查JSON对象是否正确到达了那里。是的,我的bad必须简化类:)…它是固定的。它可以编译,并且可以在脚本属性中看到我的脚本。我确实在script.src上发布了一个警报,我是新来的请发布您的ajax调用,因为问题就在那里;)已在上面编辑过..编辑2..也用于警报(结果);我可以查看我的属性,例如id、脚本等,但用于警报(result.id);我没有定义。。
 var g = new GenericResults();
 g.Id = 2;
 g.Script = AffiliateTracking.getScript(g.Id); //This gets me the above script

 HttpContext.Current.Response.ContentType = "application/json";
 strReturn = new JavaScriptSerializer().Serialize(g);
 success: function (result) {
                        if (result.hasOwnProperty("d")) { result = result.d; }
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = result.Script;
    document.getElementsByTagName('body')[0].appendChild(script);
}
//import this namespace:
using System.Web.Script.Serialization;

// declare a class to contain all the info you will need client-side
[Serializable]
public class GenericResult
{
    public int OrderReference  { get; set; }
    public string URL {get; set;}
    public string EID  { get; set; }
    public string Comment  { get; set; }
    // etc. etc.
}

//In your static method, instance and populate such class:
var r = new GenericResult();
r.OrderReference = 34;
r.URL = "http://www.google.com";
r.EID = "someString";
r.Comment = "this will work like a charm";
this.Response.ContentType = "application/json";
this.Response.Write(new JavaScriptSerializer().Serialize(r));
//In your AJAX 'onsuccess' callback, you can use the object very easily, eg:
function callback(r){
    var script = document.createElement('script');  
    script.type = 'text/javascript';
    script.src = r.URL;
    document.getElementsByTagName('body')[0].appendChild(script);
}
 success: function (result) {
    //what is the next line for?!?!?!
    //if (result.hasOwnProperty("d")) { result = result.d; } 

    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = result.Script;
    document.getElementsByTagName('body')[0].appendChild(script);
}